将RDD转换为DataFrame PySp时出错

2024-06-02 07:26:32 发布

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

我在apachespark做一些研究,我遇到了一些非常奇怪的事情。请参见以下代码:

ClimateRdd = ClimateRdd.map(lambda x: tuple(x))
print ClimateRdd.first()

这些命令返回给我这行: ('1743-11-01', '4.3839999999999995', '2.294', '\xc3\x85land')

然后我把它移到一个像这样的数据帧中:

^{pr2}$

这很好,我得到了这样的结果:

+----------+
|        dt|
+----------+
|1743-11-01|
|1743-12-01|
|1744-01-01|
|1744-02-01|
|1744-03-01|
+----------+
only showing top 5 rows

获取查询结果后,尝试运行以下行:

dates = result.map(lambda x: "Datas: " + x.dt)
print dates.collect()

我得到了java的一个异常,原因是:Caused by: java.lang.IllegalStateException: Input row doesn't have expected number of values required by the schema. 4 fields are required while 5 values are provided.

我做了很多研究,发现了问题所在,我把代码的第一部分改为:

ClimateRdd = ClimateRdd.map(lambda x: (x[0], x[1], x[2], x[3]))       

而且成功了!在

问题是,为什么第一部分不起作用?为什么要手动生成元组?有没有办法动态创建这个元组?在


Tags: lambda代码mapbydtrequiredjava事情
2条回答

问题是脏数据。数据不在默认拆分参数中。问题就在那里。在

当我进行元组转换时,假设结构有4个字段,与大部分数据一致。但在一条特定的线路上,这是不正确的。在

这就是元组转换中数据帧崩溃的原因。在

这有点奇怪。 你为什么需要元组?列表与地图配合得很好。在

ClimateRdd.map(lambda x: [x[0], x[1], x[2], x[3]])       

相关问题 更多 >