Spark Dataframe结构数组

时间:2019-05-20 16:23:07

标签: scala apache-spark azure-databricks

我在数据框中有一个列,该列是一个数组[总是一个项目],看起来像这样:

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中的值?

1 个答案:

答案 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))