簡體   English   中英

無法將RDD轉換為數據幀

[英]Fail to convert an RDD to dataframe

我正在嘗試將RDD轉換為數據幀,但它失敗並出現錯誤:

org.apache.spark.SparkException:由於階段失敗而導致作業中止:階段2.0中的任務0失敗4次,最近一次失敗:階段2.0中的任務0.3丟失(TID 11,10.139.64.5,執行程序0)

這是我的代碼:

items = [(1,12),(1,float('Nan')),(1,14),(1,10),(2,22),(2,20),(2,float('Nan')),(3,300),
         (3,float('Nan'))]

sc = spark.sparkContext
rdd = sc.parallelize(items)

itemsRdd = rdd.map(lambda x: Row(id=x[0], col1=int(x[1])))

df = itemsRdd.toDF() # The error is thrown in this line.

此代碼有多個問題。

您在這里可能遇到的第一個問題是缺少Row類的導入,因此toDF()方法無法執行並無法為您的數據toDF()創建邏輯計划。

第二個問題出現在col1列的定義中。 如果嘗試執行int(float('nan')) ,則將導致ValueError ,因此稍后在對數據框調用操作時會導致執行崩潰。

您可以通過以下方式解決這兩個問題:

items = [(1,12),(1,float('Nan')),(1,14),(1,10),(2,22),(2,20),(2,float('Nan')),
         (3,300),(3,float('Nan'))]

sc = spark.sparkContext
rdd = sc.parallelize(items)

df = rdd.toDF(["id", "col1"])

如果您想重新輸入列,我建議對要重新輸入的特定列使用cast方法。 這是在Spark數據幀中更改列類型而不是在每一行上強制使用Python類型的一種更安全,更快和更穩定的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM