在 pyspark 中创建列数组

Posted

技术标签:

【中文标题】在 pyspark 中创建列数组【英文标题】:create array of columns in pyspark 【发布时间】:2021-03-11 09:46:58 【问题描述】:

我有一个单行多列的数据框。我希望它将其转换为多行。 我在***上发现了一个类似的问题here。

问题回答了如何在 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: _*))

【问题讨论】:

【参考方案1】:

在 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))

【讨论】:

以上是关于在 pyspark 中创建列数组的主要内容,如果未能解决你的问题,请参考以下文章

无法在 spark/pyspark 中创建数组文字

Pyspark 将 json 数组转换为数据帧行

在 PySpark 的两个不同 pyspark.sql.dataframes 中的两列中创建一个 pyspark.sql.dataframe

无法在 PySpark 中创建数据框

pyspark 给出以下错误无法在 /tmp 中创建本地目录

两个数据帧的数组列的平均值并在pyspark中找到最大索引