将 Spark DataFrame 列转换为 Python 列表

174

我在处理一个包含两列mvv和count的数据框。

+---+-----+
|mvv|count|
+---+-----+
| 1 |  5  |
| 2 |  9  |
| 3 |  3  |
| 4 |  1  |

我希望获得两个列表,分别包含MVV值和计数值。就像这样:

mvv = [1,2,3,4]
count = [5,9,3,1]
所以,我尝试了以下代码:第一行应返回一个Python列表中的行。我想看到第一个值:
mvv_list = mvv_count_df.select('mvv').collect()
firstvalue = mvv_list[0].getInt(0)

但是在第二行代码中我会收到一个错误消息:

AttributeError: getInt


2
从Spark 2.3开始,此代码是最快且最不可能导致OutOfMemory异常的:list(df.select('mvv').toPandas()['mvv'])Arrow已集成到PySpark,这显著加速了toPandas。如果您使用的是Spark 2.3+,请勿使用其他方法。有关更多基准测试细节,请参见我的答案。 - Powers
11个回答

4
尽管有很多答案,但当您需要将列表与 whenisin 命令结合使用时,其中一些答案可能无法正常工作。最简单但有效的方法是使用列表推导式和 [0] 来避免行名,从而得到一个扁平化的值列表:
flatten_list_from_spark_df=[i[0] for i in df.select("your column").collect()]

另一种方法是使用panda数据框架,然后使用list函数,但这种方法不够方便并且效果也不如使用this.a。

1
这是最佳答案。RDD已经过时且难以使用。 - Michael H.

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