如何筛选包含Array / Struct的数据框列

时间:2017-10-25 03:14:02

标签: arrays scala apache-spark dataframe struct

Spark版本:2.1

Scala版本:2.11

我在编写之前有一个具有以下结构的数据框并存储到镶木地板文件中。它有很多其他专栏,但为了清晰起见,我将它缩短到只有2列:

+---+--------------------+
|day|   table_row        |
+---+--------------------+
|  8|[,129,,,,,J,WENDI...|
|  8|[_DELETE_THIS_,_D...|
|  8|[_DELETE_THIS_,_D...|

...架构如下所示:

     root 
     |-- day: long (nullable = true)
     |-- table_row: struct (nullable = true)
     |    |-- DATE: string (nullable = true)
     |    |-- ADMISSION_NUM: string (nullable = true)
     |    |-- SOURCE_CODE: string (nullable = true)
etc..

'table_row'有超过100个数据元素,我只发布了一个片段。在处理过程中,我必须创建几个虚拟行,每个字段填充“_DELETE_THIS_”。对于每个正常行,我有2个虚拟行。现在我试图从数据帧中过滤掉这些虚拟行,只写有效行,但我无法使用任何方法。我尝试了几种方法,但无法找到合适的解决方案。有人能帮助我吗?

由于 Qubiter

1 个答案:

答案 0 :(得分:1)

您可以使用filter功能。您可以从table_row中获取任何字段元素,因为您说每个字段都填充了_DELETE_THIS_

val finalDF = df.filter($"table_row.DATE" =!= "_DELETE_THIS_")

此处$"table_row.DATE"是您调用DATE列的struct元素的方式。

我希望答案很有帮助。