Pyspark:将DataFrame转换为RDD[string]

8

我想将 pyspark.sql.dataframe.DataFrame 转换为 pyspark.rdd.RDD[String]

我将 DataFrame df 转换为 RDD data

data = df.rdd
type (data)
## pyspark.rdd.RDD 

新的RDD data 包含了 Row

first = data.first()
type(first)
## pyspark.sql.types.Row

data.first()
Row(_c0=u'aaa', _c1=u'bbb', _c2=u'ccc', _c3=u'ddd')

我想把 Row 转换成 String 的列表,例如下面的示例:

u'aaa',u'bbb',u'ccc',u'ddd'

谢谢

2个回答

14

PySpark Row 就是一个tuple,可以像使用元组一样使用。这里所需的只是一个带有list的简单map(或者如果您还想展开行,则为flatMap):

data.map(list)

或者如果您期望不同的类型:

data.map(lambda row: [str(c) for c in row])

2
谢谢 @zero323,有了你的答案,我的学习曲线变得更好了。 - Toren

0

被接受的答案已经过时了。在Spark 2.0中,您现在必须明确声明您正在通过将.rdd添加到语句来转换为rdd。因此,在Spark 1.0中,这个语句的等效语句是:

data.map(list)

现在应该是:

data.rdd.map(list)

在Spark 2.0中。 与此帖子中的被接受答案相关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接