apache-spark - 在 pyspark 中分解 Maptype 列

标签 apache-spark pyspark apache-spark-sql explode

我有这样一个数据框

data = [(("ID1", {'A': 1, 'B': 2}))]
df = spark.createDataFrame(data, ["ID", "Coll"])
df.show()

+---+----------------+
| ID|            Coll|
+---+----------------+
|ID1|[A -> 1, B -> 2]|
+---+----------------+

df.printSchema()
root
 |-- ID: string (nullable = true)
 |-- Coll: map (nullable = true)
 |    |-- key: string
 |    |-- value: long (valueContainsNull = true)

我想展开“Coll”列,这样

+---+-----------+
| ID| Key| Value|
+---+-----------+
|ID1|   A|     1|
|ID1|   B|     2| 
+---+-----------+

我正在尝试在 pyspark 中执行此操作

如果我只使用一列我就成功了,但是我也想要 ID 列

df.select(explode("Coll").alias("x", "y")).show()

+---+---+
|  x|  y|
+---+---+
|  A|  1|
|  B|  2|
+---+---+

最佳答案

只需将 ID 列添加到 select 就可以了:

df.select("id", explode("Coll").alias("x", "y"))

关于apache-spark - 在 pyspark 中分解 Maptype 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55040340/

相关文章:

sql - pyspark中的过滤器值不相等

python-3.x - 如何使用pyspark将spark与hive连接?

scala - Spark 错误 - 退出状态 : 143. 诊断:根据请求终止容器

python - 将pyspark偏移滞后动态值检索到其他数据帧

python - PySpark:将 RDD 转换为数据框中的列

apache-spark - 基于其他数据帧中的列 Spark 重复数据帧中的列

python - 如何将 pyspark 数据框中的单元格中的 CSV 值分别分隔为新列及其值

scala - Spark 数据帧 saveAsTable 正在使用单个任务

apache-spark - 启动 Hive 时出现此错误 - log4j :ERROR Could not instantiate class [org. apache.hadoop.hive.shims.HiveEventCounter]

apache-spark - 为什么格式 ("kafka")失败并出现 "Failed to find data source: kafka."(即使使用 uber-jar )?