如何在Spark中收集单个列?

时间:2016-02-19 00:32:38

标签: apache-spark dataframe pyspark apache-spark-sql

我想对单个列执行操作。 不幸的是,在我转换该列之后,它现在不再是它来自的数据帧的一部分,而是一个Column对象。因此,它无法收集。

以下是一个例子:

df = sqlContext.createDataFrame([Row(array=[1,2,3])])
df['array'].collect()

这会产生以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'Column' object is not callable

如何在单个列上使用collect()函数?

1 个答案:

答案 0 :(得分:16)

只需选择flatMap

即可
df.select("array").flatMap(lambda x: x).collect()
## [[1, 2, 3]] 

编辑23/1/2017

从Spark 2.0.0开始,您需要明确指定.rdd才能使用flatMap

df.select("array").rdd.flatMap(lambda x: x).collect()