gpt4 book ai didi

python - pyspark 行列表的 RDD 到 DataFrame

转载 作者:行者123 更新时间:2023-11-28 17:13:35 44 4
gpt4 key购买 nike

我有一个 RDD,其分区包含可以轻松转换为行列表的元素(碰巧是 pandas 数据帧)。把它想象成这样

rows_list = []
for word in 'quick brown fox'.split():
rows = []
for i,c in enumerate(word):
x = ord(c) + i
row = pyspark.sql.Row(letter=c, number=i, importance=x)
rows.append(row)
rows_list.append(rows)
rdd = sc.parallelize(rows_list)
rdd.take(2)

给出

[[Row(importance=113, letter='q', number=0),
Row(importance=118, letter='u', number=1),
Row(importance=107, letter='i', number=2),
Row(importance=102, letter='c', number=3),
Row(importance=111, letter='k', number=4)],
[Row(importance=98, letter='b', number=0),
Row(importance=115, letter='r', number=1),
Row(importance=113, letter='o', number=2),
Row(importance=122, letter='w', number=3),
Row(importance=114, letter='n', number=4)]]

我想把它变成一个 Spark DataFrame。我希望我能做到

rdd.toDF()

但这给出了一个无用的结构

DataFrame[_1: struct<importance:bigint,letter:string,number:bigint>,
_2: struct<importance:bigint,letter:string,number:bigint>,
_3: struct<importance:bigint,letter:string,number:bigint>,
_4: struct<importance:bigint,letter:string,number:bigint>,
_5: struct<importance:bigint,letter:string,number:bigint>]

我真正想要的是一个3列的DataFrame,比如这个

desired_df = sql_context.createDataFrame(sum(rows_list, []))

这样我就可以执行类似的操作

desired_df.agg(pyspark.sql.functions.sum('number')).take(1)

得到答案23。

解决这个问题的正确方法是什么?

最佳答案

当您需要行的 RDD 时,您有一个行列表的 RDD;你可以使用 flatMaprdd 展平,然后将其转换为数据框:

rdd.flatMap(lambda x: x).toDF().show()

+----------+------+------+
|importance|letter|number|
+----------+------+------+
| 113| q| 0|
| 118| u| 1|
| 107| i| 2|
| 102| c| 3|
| 111| k| 4|
| 98| b| 0|
| 115| r| 1|
| 113| o| 2|
| 122| w| 3|
| 114| n| 4|
| 102| f| 0|
| 112| o| 1|
| 122| x| 2|
+----------+------+------+

import pyspark.sql.functions as F

rdd.flatMap(lambda x: x).toDF().agg(F.sum('number')).show()
+-----------+
|sum(number)|
+-----------+
| 23|
+-----------+

关于python - pyspark 行列表的 RDD 到 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45699315/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com