我在数据框中有一个列,该列是一个数组[总是一个项目],看起来像这样:
root
|-- emdaNo: array (nullable = true)
| |-- element: struct (containsNull = false)
| | |-- _value: string (nullable = true)
| | |-- id: string (nullable = true)
我无法终生解决如何从中获取_value并转换为字符串...
假设x是数据框,我已经尝试过:
x.select($"arrayName._value") // Yields ["myStringHere"]
和
x.select($"arrayName[0]._value") // Errors
请问我如何获得一个好字符串,该字符串包含_value
中的值?
答案 0 :(得分:1)
case class Element(_value: String, id: String)
val df = Seq(Array(Element("foo", "bar"))).toDF("emdaNo")
df.select(element_at($"emdaNo._value", 1) as "_value").show()
输出:
+------+
|_value|
+------+
| foo|
+------+
或者(在Spark 2.4之前)
df.select($"emdaNo._value"(0))
或
df.select($"emdaNo._value".getItem(0))