【问题标题】:Spark Scala, how to check if nested column is present in dataframeSpark Scala,如何检查数据框中是否存在嵌套列
【发布时间】:2023-03-10 15:56:01
【问题描述】:

我正在从 parquet 文件中读取一个数据框,该文件具有嵌套列 (struct)。 如何检查是否存在嵌套列?

可能是这样的

+----------------------+
| column1              |
+----------------------+
|{a_id:[1], b_id:[1,2]}|
+----------------------+

或者这样

+---------------------+
| column1             |
+---------------------+
|{a_id:[3,5]}         |
+---------------------+

我知道,如何检查顶级列是否存在,如下所示:How do I detect if a Spark DataFrame has a column

df.schema.fieldNames.contains("column_name")

但是如何检查嵌套列?

【问题讨论】:

  • 您可以使用.printSchema() 来分析推断的架构。您也可以通过定义case class myClass(...) 并使用.as[myClass] 来查看它是否转换成功,从而转换为键入的Dataset
  • this answer 解释它。这是检查嵌套列的最可靠方法。

标签: scala apache-spark schema parquet


【解决方案1】:

您可以获取嵌套字段的架构作为结构,然后检查您的字段是否存在于它的字段名称中:

val index = df.schema.fieldIndex("column1")
val is_b_id_present = df.schema(index).dataType.asInstanceOf[StructType]
                          .fieldNames.contains("b_id")

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 2020-12-30
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多