在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函数来创建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))

相关内容

  • 没有找到相关文章

最新更新