无法将RDD转换为datafram

2024-09-28 01:32:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将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.

Tags: 数据inorgfailureapache错误itemsnan
1条回答
网友
1楼 · 发布于 2024-09-28 01:32:54

此代码有多个问题。你知道吗

您在这里可能遇到的第一个问题是缺少Row类的导入,因此方法toDF()无法为您的dataframe执行和创建逻辑计划。你知道吗

第二个问题出现在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类型更安全、更快、更稳定。你知道吗

相关问题 更多 >

    热门问题