如何将 pyspark 数据框列转换为 numpy 数组

Vai*_*thi 2 python numpy apache-spark pyspark

我正在尝试将具有大约 9000 万行的 pyspark 数据框列转换为 numpy 数组。

我需要数组作为scipy.optimize.minimize函数的输入。

我尝试过转换为 Pandas 和使用collect(),但这些方法非常耗时。

我是 PySpark 的新手,如果有更快更好的方法来做到这一点,请帮忙。

谢谢

这就是我的数据框的样子。

+----------+
|Adolescent|
+----------+
|       0.0|
|       0.0|
|       0.0|
|       0.0|
|       0.0|
|       0.0|
|       0.0|
|       0.0|
|       0.0|
|       0.0|
+----------+
Run Code Online (Sandbox Code Playgroud)

pis*_*all 8

#1

您将不得不以.collect()任何方式调用 a 。要从 pyspark 数据帧创建一个 numpy 数组,您可以使用:

adoles = np.array(df.select("Adolescent").collect()) #.reshape(-1) for 1-D array
Run Code Online (Sandbox Code Playgroud)

#2

您可以使用toPandas()将其转换为 pandas 数据帧,然后您可以使用 将其转换为 numpy 数组.values

pdf = df.toPandas()
adoles = df["Adolescent"].values
Run Code Online (Sandbox Code Playgroud)

或者干脆:

adoles = df.select("Adolescent").toPandas().values #.reshape(-1) for 1-D array

#3

对于分布式数组,可以尝试Dask Arrays

我还没有测试过这个,但假设它和 numpy 一样工作(可能有不一致之处):

import dask.array as da
adoles = da.array(df.select("Adolescent").collect()) #.reshape(-1) for 1-D array
Run Code Online (Sandbox Code Playgroud)