spark中df, rdd, list 转换

浏览: 9013
df to rdd:
df.rdd.map(list)
df.rdd.map(tuple)
df.rdd.map(lambda x: list(x[0]))

rdd to list:
rdd1.collect()

df to list:
df.rdd.map(list).collect()
df.rdd.map(tuple).collect()

rdd to df:
rdd1.toDF()

list to rdd:
sc.parallelize(list1)

list to df:
sc.parallelize(list1).toDF()

example 1:

df

df = spark.createDataFrame([
    (1, 144.5, 5.9, 33, 'M'),
    (2, 167.2, 5.4, 45, 'M'),
    (3, 124.1, 5.2, 23, 'F'),
], ['id', 'weight', 'height', 'age', 'gender'])

1. df to rdd

rdd1 = df.rdd.map(list)
rdd1.take(3)
[[1, 144.5, 5.9, 33, 'M'], [2, 167.2, 5.4, 45, 'M'], [3, 124.1, 5.2, 23, 'F']]

rdd2 = df.rdd.map(tuple)
rdd2.take(3)
[(1, 144.5, 5.9, 33, 'M'), (2, 167.2, 5.4, 45, 'M'), (3, 124.1, 5.2, 23, 'F')]

2. rdd to list

list1 = rdd1.collect()
print(list1)
[[1, 144.5, 5.9, 33, 'M'], [2, 167.2, 5.4, 45, 'M'], [3, 124.1, 5.2, 23, 'F']]

list2 = rdd2.collect()
print(list2)
[(1, 144.5, 5.9, 33, 'M'), (2, 167.2, 5.4, 45, 'M'), (3, 124.1, 5.2, 23, 'F')]

3. df to list

list1 = df.rdd.map(list).collect()
print(list1)
[[1, 144.5, 5.9, 33, 'M'], [2, 167.2, 5.4, 45, 'M'], [3, 124.1, 5.2, 23, 'F']]

list2 = df.rdd.map(tuple).collect()
print(list2)
[(1, 144.5, 5.9, 33, 'M'), (2, 167.2, 5.4, 45, 'M'), (3, 124.1, 5.2, 23, 'F')]

4. rdd to df

df1=rdd1.toDF()
df1.show()
+---+-----+---+---+---+
| _1| _2| _3| _4| _5|
+---+-----+---+---+---+
| 1|144.5|5.9| 33| M|
| 2|167.2|5.4| 45| M|
| 3|124.1|5.2| 23| F|
+---+-----+---+---+---+

5. list to rdd

rdd1 = sc.parallelize(list1)
rdd1.take(3)
[[1, 144.5, 5.9, 33, 'M'], [2, 167.2, 5.4, 45, 'M'], [3, 124.1, 5.2, 23, 'F']]

6. list to df

df1 = sc.parallelize(list1).toDF()
df1.show()
+---+-----+---+---+---+
| _1| _2| _3| _4| _5|
+---+-----+---+---+---+
| 1|144.5|5.9| 33| M|
| 2|167.2|5.4| 45| M|
| 3|124.1|5.2| 23| F|
+---+-----+---+---+---+

example 2:

df

df.show()
+------------------------+|
ITEM_CD_joint |
+------------------------+
|[756830] |
|[720305, 738767, 738770]|
|[229344, 229382, 749208]|
+------------------------+

df to rdd

rdd=df_this.rdd.map(list)
rdd.take(3)

[[[756830]], [[720305, 738767, 738770]], [[229344, 229382, 749208]]]

df to rdd 去掉嵌套

rdd=df_this.rdd.map(lambda x: list(x[0]))
rdd.take(3)
[[756830], [720305, 738767, 738770], [229344, 229382, 749208]]
推荐 2
本文由 safa 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册