我正在尝试将具有大约 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|
+----------+
最佳答案
#1
您必须调用 .collect()
以任何方式。要从 pyspark 数据帧创建一个 numpy 数组,您可以使用:
adoles = np.array(df.select("Adolescent").collect()) #.reshape(-1) for 1-D array
#2
您可以使用 toPandas() 将其转换为 Pandas 数据帧,然后您可以使用
.values
将其转换为 numpy 数组.pdf = df.toPandas()
adoles = df["Adolescent"].values
或者干脆:
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
关于python - 如何将 pyspark 数据框列转换为 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58162761/