我有一个单行多列的数据框架。我想把它转换成多行。我在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))