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)
您将不得不以.collect()任何方式调用 a 。要从 pyspark 数据帧创建一个 numpy 数组,您可以使用:
adoles = np.array(df.select("Adolescent").collect()) #.reshape(-1) for 1-D array
Run Code Online (Sandbox Code Playgroud)
您可以使用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
对于分布式数组,可以尝试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)