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

标签 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|
+----------+

最佳答案

#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/

相关文章:

python - 如何在 Azure 机器学习工作室中安装额外的 python 包?

python - Numpy 获取满足条件的坐标以及坐标?

Python:根据值和条件将列添加到交叉表

apache-spark - 分解pyspark中的嵌套数组

python - 嵌套列表 python

python - 自动化 Google Drive SDK 授权

python - 在 Django Celery 结果中使用临时文件

python - 矩阵与标量数组的 Numpy 乘法,没有 for 循环

apache-spark - spark-avro 数据 block 包

java - 收到此错误 "cannot access scala.reflect.api.TypeTags"