Python 将spark Rdd列转换为Pyspark中的行
我有一个spark Rdd,它的形式是Row(id,Words) 其中单词包含单词列表。我想将此列表转换为一列。 输入 我想把它转换成输出格式Python 将spark Rdd列转换为Pyspark中的行,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有一个spark Rdd,它的形式是Row(id,Words) 其中单词包含单词列表。我想将此列表转换为一列。 输入 我想把它转换成输出格式 ID Word 1 w1 1 w2 1 w3 2 w3 2 w4 如果要使用rdd,则需要使用flatMap(): rdd.flatMap(lambda x:[(x['ID'],w)表示x[“Words”]]中的w)。collect() #[(1,u'w1’,(1,u'w2’,(1,u'w3’,(2,u'w3’,(2,u'w4’)
ID Word
1 w1
1 w2
1 w3
2 w3
2 w4
如果要使用
rdd
,则需要使用flatMap()
:
rdd.flatMap(lambda x:[(x['ID'],w)表示x[“Words”]]中的w)。collect()
#[(1,u'w1’,(1,u'w2’,(1,u'w3’,(2,u'w3’,(2,u'w4’)]
但是,如果您愿意使用DataFrames(),则可以使用pyspark.sql.functions.explode
:
导入pyspark.sql.f函数
df=rdd.toDF()
df.select('ID',f.explode(“Words”).别名(“Word”).show()
#+---+----+
#|ID |字|
#+---+----+
#|1 | w1|
#|1 | w2|
#|1 | w3|
#|2 | w3|
#|2 | w4|
#+---+----+
或者更好的方法是,跳过所有的rdd
,直接创建一个数据帧:
数据=[
(1、['w1'、'w2'、'w3']),
(2,['w3','w4'])
]
df=sqlCtx.createDataFrame(数据,[“ID”,“Words”])
df.show()
#+---+------------+
#|ID|字|
#+---+------------+
#|1 |[w1,w2,w3]|
#|2 |[w3,w4]|
#+---+------------+
如果您想使用rdd
,您需要使用flatMap()
:
rdd.flatMap(lambda x:[(x['ID'],w)表示x[“Words”]]中的w)。collect()
#[(1,u'w1’,(1,u'w2’,(1,u'w3’,(2,u'w3’,(2,u'w4’)]
但是,如果您愿意使用DataFrames(),则可以使用pyspark.sql.functions.explode
:
导入pyspark.sql.f函数
df=rdd.toDF()
df.select('ID',f.explode(“Words”).别名(“Word”).show()
#+---+----+
#|ID |字|
#+---+----+
#|1 | w1|
#|1 | w2|
#|1 | w3|
#|2 | w3|
#|2 | w4|
#+---+----+
或者更好的方法是,跳过所有的rdd
,直接创建一个数据帧:
数据=[
(1、['w1'、'w2'、'w3']),
(2,['w3','w4'])
]
df=sqlCtx.createDataFrame(数据,[“ID”,“Words”])
df.show()
#+---+------------+
#|ID|字|
#+---+------------+
#|1 |[w1,w2,w3]|
#|2 |[w3,w4]|
#+---+------------+
Flat map函数创建多个列表,我不希望输出为列表格式。我可以同时在两列上使用分解函数吗?我得到了另一列,其中包含大量单词。所以我必须分解这两列together@vish我不明白flatMap()
不应创建多个列表。我认为对你来说最好的事情是用你的实际用例编辑你的问题(或者问一个新问题)。在没有看到输入和所需输出的情况下,很难给出答案,但您可能正在寻找rdd.flatMap(lambda x:[(x['ID'],w,s)表示w,s在zip中(x[“Words”],x[“Scores”])))。collect()
flatMap函数创建多个列表,我不希望输出为列表格式。我可以同时在两列上使用分解函数吗?我得到了另一列,其中包含大量单词。所以我必须分解这两列together@vish我不明白flatMap()
不应创建多个列表。我认为对你来说最好的事情是用你的实际用例编辑你的问题(或者问一个新问题)。在没有看到输入和所需输出的情况下,很难给出答案,但您可能正在寻找rdd.flatMap(lambda x:[(x['ID'],w,s)表示w,s在zip中(x[“Words”],x[“Scores”]))。collect()
ID Word
1 w1
1 w2
1 w3
2 w3
2 w4