首页 > 解决方案 > 如何从pyspark中的数据框的值创建列

问题描述

我有一个包含以下值的 df,想为 df 中存在的每个值创建列。在 pyspark 中寻找解决方案。基本上我可以在 pyspark 中用一个案例来做这件事,寻找不同的方法。任何建议都会有所帮助。

东风:

|number|color|
|------|-----|
|123   |red  |
|234   |blue |
|555   |white|

预期输出:

数字 红色的 蓝色的 白色的
123 1 0 0
234 0 1 0
555 0 0 1

标签: pythonapache-sparkpysparkapache-spark-sql

解决方案


您可以分组依据number、透视依据color和应用该lit(1)值。要删除空值,请应用[dataframe].na.fill(0)

import pyspark.sql.functions as f

df = spark.createDataFrame([
  [123, 'red'],
  [234, 'blue'],
  [555, 'white']
], ['number', 'color'])

pivot_df = df.groupBy('number').pivot('color').agg(f.lit(1))
pivot_df = pivot_df.na.fill(0)

(pivot_df
 .select('number', 'red', 'blue', 'white')
 .sort('number')
 .show(truncate=False))
# +------+---+----+-----+
# |number|red|blue|white|
# +------+---+----+-----+
# |123   |1  |0   |0    |
# |234   |0  |1   |0    |
# |555   |0  |0   |1    |
# +------+---+----+-----+

推荐阅读