在pyspark中创建列数组

wtlkbnrh  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(345)

我有一个具有单行和多列的Dataframe。我想把它转换成多行。我在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: _*))
hlswsv35

hlswsv351#

在Pypark中,您可以使用 create_map 函数创建Map列。还有一份清单 itertools.chain 要获得scala平面图的等效值:

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

相关问题