我正在尝试将RDD转换为数据帧,但失败并出现错误:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 2.0 failed 4 times, most recent failure: Lost task 0.3 in stage 2.0 (TID 11, 10.139.64.5, executor 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()
无法为您的dataframe执行和创建逻辑计划。你知道吗第二个问题出现在
col1
列的定义中。如果您尝试执行int(float('nan'))
,它将导致ValueError
,因此在稍后调用数据帧上的操作时会导致执行崩溃。你知道吗您可以通过以下方式解决这两个问题:
如果您希望重新键入列,我建议对要重新键入的特定列使用
cast
方法。在Spark数据帧中更改列类型比在每行上强制使用Python类型更安全、更快、更稳定。你知道吗相关问题 更多 >
编程相关推荐