【问题标题】:Spark Dataframe Array of StructSpark Dataframe 结构体数组
【发布时间】:2019-05-20 16:23:06
【问题描述】:

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

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 中保存的值的漂亮字符串?

【问题讨论】:

    标签: scala apache-spark azure-databricks


    【解决方案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))
    

    【讨论】:

    • 谢谢,你在 spark 2.4 之前提到的很有趣......但是这种语法看起来比 element_at 更具可读性
    • 同意,对于具有 Scala/Java 等背景的程序员来说,后者可以说更具可读性。函数element_at 是在 Spark 2.4 中引入的,对于索引从 1 开始的强大 SQL 背景的人来说,它可能看起来更熟悉。
    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2021-08-09
    • 2019-08-19
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多