python - 将 spark DataFrame 转换为每行的列表
问题描述
目前正在接收一个 spark 数据框并将其转换为 pandas 数据框以列出行。我想创建列表而不将其变成熊猫数据框。Function2 将函数应用于每一行的字符串表示。列名不会是恒定的。
def func1(df):
df = df.select("*").toPandas()
job_args = [(", ".join(str(i) for i in list(filter(None.__ne__, df.iloc[c].tolist())))) for c in range(0, len(df))]
results = spark.sparkContext.parallelize(job_args).map(lambda n: function2(n)).collect()
return results
例子:
+-----+-----+
|index|count|
+-----+-----+
| 1 | 5 |
| 2 | 9 |
| 3 | 3 |
| 4 | 1 |
变成
rows[0] = [1,5]
rows[1] = [2,9]
rows[2] = [3,3]
rows[3] = [4,1]
解决方案
如果目标是获取 spark 数据框中的所有列并将它们连接到一个字符串,那么您可以使用以下两个步骤来完成:
- 使用数组函数创建一个新的 col并将所有 cols 放入其中
- 使用array_join函数将元素连接到单个字符串
这是一个工作示例如何做到这一点:
import pyspark.sql.functions as f
l = [(1, 5), (2, 9), (3, 3), (4, 1)]
df = spark.createDataFrame(l, ['index', 'count'])
(
df
.withColumn('arr', f.array(df.columns))
.withColumn('str', f.array_join('arr', ', '))
.select('str')
).show()
+----+
| str|
+----+
|1, 5|
|2, 9|
|3, 3|
|4, 1|
+----+
推荐阅读
- opencv - 流光图像处理
- css - 如果为真,则将变量传递给样式化组件以添加其他样式
- python - 我尝试在目录中打开文件,但出现此错误 FileNotFoundError: [Errno 2] No such file or directory: 'john.txt'
- c - 为什么我的 make 命令仍然显示“没有目标......”?
- java - 如何防止将 WebView 传递给外部类可能导致的内存泄漏?
- javascript - ExtJS - 让商店只生成带有数字的 ID
- python - Python tkinter GUI Windows 流出屏幕 - 按钮不可见
- unity3d - 如何检查游戏对象在其脚本之外是否处于活动状态?
- angular - ESLINT:组件选择器(Angular)
- python - 如何在数据框中创建加权特征?