scala - 在 Spark-Scala 中将单个字符串列拆分为多列
问题描述
我有一个数据框:
+----+--------------------------+
|city|Types |
+----+--------------------------+
|BNG |school |
|HYD |school,restaurant |
|MUM |school,restaurant,hospital|
+----+--------------------------+
我想用','将Types列拆分为多个列。
问题是列大小没有固定,所以我不知道该怎么做。
我在 pyspark 中看到了另一个相关问题,但我想在 spark-scala 中而不是 pyspark
任何帮助表示赞赏。
提前致谢
解决方案
解决列中不规则大小的一种方法是调整表示。
例如:
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|
+----+--------------+--------+-----+-----+
推荐阅读
- node.js - Nodemailer:电子邮件已接受并排队但从未收到
- c# - 将文件写入 Azure 存储(文件共享)
- docker - Ubuntu 上 Docker 容器中的“mount --bind”命令失败
- batch-file - 使用批处理执行网络文件夹中的文件
- python - 为什么我的反应角色命令没有给人们角色?
- laravel - 如何从 laravel 的数据库中获取所有字段类型?
- python - 如何在所有 xml python 中删除重复的 xml 节点
- python - 在scrapy中旋转代理和mattes/rotating-proxy docker
- excel - For循环从每一行复制值
- elasticsearch - logstash 中的 %{[field]} 和 [field] 有什么区别