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)
但我想知道是否有更直接的解决方案
为此,您需要使用 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)
| 归档时间: |
|
| 查看次数: |
7473 次 |
| 最近记录: |