python - 在 pyspark 中创建列数组
问题描述
我有一个单行多列的数据框。我希望它将其转换为多行。我在stackoverflow上发现了一个类似的问题。
这个问题回答了如何在 scala 中完成,但我想在 pyspark 中做到这一点。我试图在 pyspark 中复制代码,但我无法做到这一点。
我无法将 scala 中的以下代码转换为 python:
import org.apache.spark.sql.Column
var ColumnsAndValues: Array[Column] = df.columns.flatMap { c => {Array(lit(c), col(c))}}
val df2 = df1.withColumn("myMap", map(ColumnsAndValues: _*))
解决方案
在 Pyspark 中,您可以使用create_map
函数来创建地图列。和一个列表理解itertools.chain
来获得相当于 scala flatMap :
import itertools
from pyspark.sql import functions as F
columns_and_values = itertools.chain(*[(F.lit(c), F.col(c)) for c in df1.columns])
df2 = df1.withColumn("myMap", F.create_map(*columns_and_values))
推荐阅读
- javascript - 获取 promise 的数组值
- python - 为什么这会因为我的冒号而引发语法错误?
- apache-spark-sql - 来自给定输入文本的 Pyspark DataFrame
- ubuntu - 如何在 Ubuntu 19 上安装 Pgadmin4
- sql-server - 使用子查询添加计算列
- reactjs - useState 钩子的 setState 函数会触发整个组件的重新渲染还是只是返回的 JSX 部分代码?
- javascript - 如何使用 js 从 Github 存储库中创建包含文件的数组?
- python - 使用 Python 的低峰宽的高斯拟合不准确
- linux - 是否可以在 Linux 中自动更改挂载设备?
- python - Inaccurate audio data plot with FFT (Python)