首页 > 解决方案 > 在 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: _*))

标签: pythonapache-sparkpysparkapache-spark-sql

解决方案


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

推荐阅读