Spark Scala,如何检查数据框中是不是存在嵌套列

Posted

技术标签:

【中文标题】Spark Scala,如何检查数据框中是不是存在嵌套列【英文标题】:Spark Scala, how to check if nested column is present in dataframeSpark Scala,如何检查数据框中是否存在嵌套列 【发布时间】:2019-03-14 13:30:34 【问题描述】:

我正在从 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 解释它。这是检查嵌套列的最可靠方法。 How do I detect if a Spark DataFrame has a column的可能重复 【参考方案1】:

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

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

【讨论】:

以上是关于Spark Scala,如何检查数据框中是不是存在嵌套列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 spark/scala 检查是不是存在大查询表

如何使用 Scala/Spark 添加不基于数据框中现有列的新列? [复制]

如何在 spark scala 中检查与其关联的列名和数据是不是匹配

如何在 Scala/Spark 的数据框中扩展数组 [重复]

Scala(Spark)连接数据框中的列[重复]

与使用 Pyspark 的另一个表相比,检查数据框中是不是存在重复项 [重复]