[英]DataBricks: Pivottable for spark dataframe
假设我有以下数据框
年份 周一值1 值2 2019 年 1 月 10 日 2019 年 1 月 20 日 2019 年 2 月 30 日 2019 年 2 月 30 日 2019 年 2 月 10 日 10 月
我想 pivot 到: 年 JAN_VALUE1 FEB_VALUE1 JAN_VALUE2 JAN_VALUE2 2019 30 40 30 40
任何方法来实现这一点。
这是我执行此操作的 pyspark 代码:
from pyspark.sql.functions import *
from pyspark.sql.types import *
values = [
(2019,"Jan",10,10),
(2019,"Jan",20,20),
(2019,"FEB",30,30),
(2019,"FEB",10,10)
]
rdd = sc.parallelize(values)
schema = StructType([
StructField("Year", IntegerType(), True),
StructField("Mon", StringType(), True),
StructField("value1", IntegerType(), True),
StructField("value2", IntegerType(), True)
])
data = spark.createDataFrame(rdd, schema)
valu1Pivoted = data.groupBy("Year") \
.pivot("Mon") \
.sum("value1") \
.select(col("Year"), \
col("Jan").alias("JAN_VALUE1"), \
col("FEB").alias("FEB_VALUE1"))
valu2Pivoted = data.groupBy("Year") \
.pivot("Mon") \
.sum("value2") \
.select(col("Year"), \
col("Jan").alias("JAN_VALUE2"), \
col("FEB").alias("FEB_VALUE2"))
finalData = valu1Pivoted.join(valu2Pivoted, valu1Pivoted.Year == valu2Pivoted.Year, "inner") \
.drop(valu1Pivoted.Year) \
.select("Year", "JAN_VALUE1","FEB_VALUE1","JAN_VALUE2","FEB_VALUE2")
finalData.show(20,False)
结果:
+----+----------+----------+----------+----------+
|Year|JAN_VALUE1|FEB_VALUE1|JAN_VALUE2|FEB_VALUE2|
+----+----------+----------+----------+----------+
|2019|30 |40 |30 |40 |
+----+----------+----------+----------+----------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.