微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RDD 到 DF 的转换

如何解决RDD 到 DF 的转换

我是 Pyspark 的新手。我的代码如下所示。我不确定为什么 df.collect()显示所有字符串值的 None 值。

>> rdd = sc.parallelize([{'name': 'test','age': {"id": 326,"first_name": "Will","last_name": "Cur"}},{'name': 'test2','age': {"id": 751,"last_name": "Mc"}}])
>> rdd.collect()
[{'name': 'test','age': {'id': 326,'first_name': 'Will','last_name': 'Cur'}},'age': {'id': 751,'last_name': 'Mc'}}]
>> df = spark.createDataFrame(rdd)
>> df.collect()
[Row(age={'last_name': None,'first_name': None,'id': 326},name='test'),Row(age={'last_name': None,'id': 751},name='test2')]

解决方法

对于复杂的数据结构,Spark 可能难以从 RDD 推断出模式,因此您可以提供一个模式来确保正确完成转换:

df = spark.createDataFrame(
    rdd,'name string,age struct<id:int,first_name:string,last_name:string>'
)

df.collect()
# [Row(name='test',age=Row(id=326,first_name='Will',last_name='Cur')),#  Row(name='test2',age=Row(id=751,last_name='Mc'))]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。