scala - 如何解析 DataFrame 中的列(带有列表数据)?
问题描述
DataFrame 中有一个包含列表的列,我想解析该列表的第一个元素并用它替换该列。例如:
col1
[elem1, elem2]
[elem3, elem4]
我想做这个:
col1
elem1
elem3
我试过dataFrameName.withColumn("col1", explode($"col1"))
了,但它给了我一个 NoSuchElementException。这样做的正确方法是什么?
解决方案
col1
用它的第一个元素替换 ArrayType 列explode
是没有用的。您可以简单地将其替换为$"col1"(0)
(或$"col1".getItem(0)
),如下所示:
import spark.implicits._
import org.apache.spark.sql.functions._
val df = Seq(
Seq("elem1", "elem2"),
Seq("elem3", "elem4")
).toDF("col1")
df.withColumn("col1", $"col1"(0)).show
// +-----+
// | col1|
// +-----+
// |elem1|
// |elem3|
// +-----+
请注意,您可能遇到了一个单独的问题NoSuchElementException
,因为explode
-ing ArrayType 列通常不会产生这样的异常。
推荐阅读
- regex - 仅在存在某些子字符串的情况下使用非捕获组
- sql - Big Query 提取层次结构
- html - 禁用按钮仍会触发保存方法角度 HTML
- html - 向左填充后 HTML 列换行
- ios - 委托和数据源在 MessageKit Swift IOS 中没有工作
- sass - WebStorm 指向不存在的 SCSS 模块导入错误
- reactjs - ReactJs AutoComplete 未使用 antd 显示在下拉列表中
- java - 如何找到 Guava 公共后缀版本
- r - 使用两个比例的功效计算的小样本量误差
- python - raise ValueError("形状 %s 和 %s 不兼容" % (self, other))