PySpark 列到其值的 RDD

zar*_*ski 2 dataframe apache-spark rdd pyspark

我正在寻找将数据帧列转换为 RDD 的最直接、最惯用的方法。假设列views包含浮点数。以下不是我要找的

views = df_filtered.select("views").rdd
Run Code Online (Sandbox Code Playgroud)

因为我最终得到的是 aRDD[Row]而不是 a RDD[Float],因此我无法将其提供给 mllib.stat 中的任何统计方法(如果我正确理解发生了什么):

corr = Statistics.corr(views, likes, method="pearson")
TypeError: float() argument must be a string or a number
Run Code Online (Sandbox Code Playgroud)

在 pandas 中,我会尝试.values()将 pandas Series 转换为其值数组,但 RDD.values()方法似乎无法以这种方式工作。我最终得出以下解决方案

views = df_filtered.select("views").rdd.map(lambda r: r["views"])
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更直接的解决方案

vik*_*ana 7

为此,您需要使用 flatMap 。

>>> newdf=df.select("emp_salary")
>>> newdf.show();
+----------+
|emp_salary|
+----------+
|     50000|
|     10000|
|    810000|
|      5500|
|      5500|
+----------+

>>> rdd=newdf.rdd.flatMap(lambda x:x)
>>> rdd.take(10);
[50000, 10000, 810000, 5500, 5500]
Run Code Online (Sandbox Code Playgroud)

你看起来像这样吗?

是的,而不是将您的语句转换为:

views = df_filtered.select("views").rdd.flatMap(lambda x:x)
Run Code Online (Sandbox Code Playgroud)