在 Spark-Scala 中将单个字符串列拆分为多列
Posted
技术标签:
【中文标题】在 Spark-Scala 中将单个字符串列拆分为多列【英文标题】:Split single String column to multiple columns in Spark-Scala 【发布时间】:2020-11-18 13:55:45 【问题描述】:我有一个数据框:
+----+--------------------------+
|city|Types |
+----+--------------------------+
|BNG |school |
|HYD |school,restaurant |
|MUM |school,restaurant,hospital|
+----+--------------------------+
我想用 ',' 将 Types 列拆分为多个列。
问题是列大小没有固定,所以我不知道该怎么做。
我在 pyspark 中看到了另一个相关问题,但我想在 spark-scala 中而不是 pyspark 中解决
感谢任何帮助。
提前致谢
【问题讨论】:
在类型长度不固定的情况下,确定要将Types
列拆分为多列吗?因为这样,所需输出数据帧中的许多字段将是null
。为相同的city
拥有与Types
列中的类型一样多的记录不是更好吗?或者甚至更好的带有键值对的 RDD?
只使用一个数组作为列。
【参考方案1】:
解决列中不规则大小的一种方法是调整表示。
例如:
val data = Seq(("BNG", "school"),("HYD", "school,res"),("MUM", "school,res,hos")).toDF("city","types")
+----+--------------+
|city| types|
+----+--------------+
| BNG| school|
| HYD| school,res|
| MUM|school,res,hos|
+----+--------------+
data.withColumn("isSchool", array_contains(split(col("types"),","), "school")).withColumn("isRes", array_contains(split(col("types"),","), "res")).withColumn("isHos", array_contains(split(col("types"),","), "hos"))
+----+--------------+--------+-----+-----+
|city| types|isSchool|isRes|isHos|
+----+--------------+--------+-----+-----+
| BNG| school| true|false|false|
| HYD| school,res| true| true|false|
| MUM|school,res,hos| true| true| true|
+----+--------------+--------+-----+-----+
【讨论】:
以上是关于在 Spark-Scala 中将单个字符串列拆分为多列的主要内容,如果未能解决你的问题,请参考以下文章