pyspark - PySpark 数据框转换
问题描述
我有以下数据框:
import pandas as pd
from pyspark import SparkContext
from pyspark.sql import SQLContext
sc = SparkContext('local')
df_pd = pd.DataFrame([[11, 'abc', 1, 114],
[11, 'abc', 2, 104],
[11, 'def', 9, 113],
[12, 'abc', 1, 14],
[12, 'def', 3, 110],
[14, 'abc', 1, 194],
[14, 'abc', 2, 164],
[14, 'abc', 3, 104],],
columns=['id', 'str', 'num', 'val'])
sql_sc = SQLContext(sc)
df_spark = sql_sc.createDataFrame(df_pd)
df_spark.show()
哪个打印:
+---+---+---+---+
| id|str|num|val|
+---+---+---+---+
| 11|abc| 1|114|
| 11|abc| 2|104|
| 11|def| 9|113|
| 12|abc| 1| 14|
| 12|def| 3|110|
| 14|abc| 1|194|
| 14|abc| 2|164|
| 14|abc| 3|104|
+---+---+---+---+
我的目标是将其转换为:
+---+-----+-----+-----+-----+-----+
| id|abc_1|abc_2|abc_3|def_3|def_9|
+---+-----+-----+-----+-----+-----+
| 11| 114| 104| NaN| NaN| 113|
| 12| 14| NaN| NaN| 110| NaN|
| 14| 194| 164| 104| NaN| NaN|
+---+-----+-----+-----+-----+-----+
(每行id
,列名称为str+'_'+str(val)
,结果表中填充了相应val
的 s,所有其他条目为NaN
)
我将如何实现这一目标?我从
column = df_spark.select(concat(col("str"), lit("_"), col("num")))
通过它我得到列名。
df_spark.select('id').distinct()
给出不同id
的 s
但我无法构建新的 Dataframe 或填充它。
编辑:与可能重复的不同之处在于我不知道枢轴功能,而另一个问题询问在 pyspark 中哪里可以找到函数“枢轴”。我不知道那是否是重复的,但我没有找到另一个问题,因为我不知道要寻找什么。
解决方案
我不确定您要对 val 字段使用哪种聚合。我使用了 sum,这是解决方案
import pyspark.sql.functions as F
df_spark = df_spark.withColumn('col', F.concat(F.col("str"), F.lit("_"), F.col("num")))
df_spark.groupBy('id').pivot('col').agg({'val':'sum'}).orderBy('id').show()
+---+-----+-----+-----+-----+-----+
| id|abc_1|abc_2|abc_3|def_3|def_9|
+---+-----+-----+-----+-----+-----+
| 11| 114| 104| null| null| 113|
| 12| 14| null| null| 110| null|
| 14| 194| 164| 104| null| null|
+---+-----+-----+-----+-----+-----+
推荐阅读
- javascript - Javascript 时区 gmt 和偏移量
- python - 将 scipy.ndimage.rotate 与 alpha 通道一起使用时图像中的伪影
- r - 如何在R中的另一个字符串的重复间隔处插入一个字符串
- sql - 在用特殊字符分隔的表中拆分列值
- javascript - Javascript:替换字符串中的重复字符?
- postgresql - zabbix 与 docker-compose 和本地 postgres 数据库错误
- c - 为什么要区分 .rel.text 和 .rel.data 部分?
- java - Android Studio 如何创建具有字符串字符数的edittext?
- bash - 用于 Sure SMS 网关的 Power Shell 脚本,用于生成 URL 请求并通过服务器发送 SMS
- python - 拆分和映射 pyspark 数据框字段