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

pyspark:来自 rdd 的数据框,包含列表列表

如何解决pyspark:来自 rdd 的数据框,包含列表列表

我是 Spark 的新手(使用 Python),即使浏览了相关帖子也无法弄清楚这一点。

我有一个 RDD。 RDD 的每条记录都是一个列表列表,如下所示

[[[1073914607,-1],[1073914607,2,7.88],4,40.0]]

[[[1074079003,[1074079003,2.87],35.2]]

我想将 RDD 转换为具有 3 列的数据框,基本上堆叠所有元素列表。数据框应如下所示。

enter image description here

我尝试过my_rdd.toDF(),但它给了我两行四列,每个元素列表在一列中。我还尝试了其他可能相关的帖子中建议的一些解决方案。由于我对 spark 还很陌生,因此我遇到了各种我可以弄清楚的错误。请帮忙。谢谢。

于 2021 年 7 月 28 日添加。最后,我执行以下操作来遍历每个元素并生成一个长列表并将其转换为数据帧。可能这不是最有效的方法,但它解决了我的问题。

result_lst=[]

for x in my_rdd.toLocalIterator():
    for y in x:
        result_lst.append(y)

result_df=spark.createDataFrame(result_lst,['account_id','product_id','price'])

解决方法

>>> data = ([[1,2],[1,4]],[[2,5],[2,6]])
>>> df = sc.parallelize(data).toDF(['c1','c2'])

>>> df.show()
+------+------+
|    c1|    c2|
+------+------+
|[1,2]|[1,4]|
|[2,5]|[2,6]|
+------+------+

>>> df1 = df.select(df.c1.alias('c3')).union(df.select(df.c2).alias('c3'))
>>> df1.show()
+------+
|    c3|
+------+
|[1,2]|
|[2,5]|
|[1,6]|
+------+

>>> df1.select(df1.c3,df1.c3[0],df1.c3[1]).show()
+------+-----+-----+
|    c3|c3[0]|c3[1]|
+------+-----+-----+
|[1,2]|    1|    2|
|[2,5]|    2|    5|
|[1,4]|    1|    4|
|[2,6]|    2|    6|
+------+-----+-----+

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