在 Spark 丢失记录中爆炸 [重复]

Posted

技术标签:

【中文标题】在 Spark 丢失记录中爆炸 [重复]【英文标题】:Explode in Spark missing records [duplicate] 【发布时间】:2019-03-15 18:13:46 【问题描述】:

DF 的现有架构:

|-- col1: string (nullable = true)
|-- col2: array (nullable = true)
|    |-- element: struct (containsNull = true)
|    |    |-- col2_1: string (nullable = true)
|    |    |-- col2_2: string (nullable = true)

现有 Schema 的示例数据:

 col1         col2    
  A       [[0,2],[1,3]]
  B       [[1,5]] 
  C       [[5,9],[4,6],[2,6]] 

所需架构:

|-- col1: timestamp (nullable = true)
|-- col2_1: string (nullable = true)
|-- col2_2: string (nullable = true)

所需架构的示例数据:

 col1          col2_1    col2_2    
  A            0           2
  A            1           3
  B            1           5
  C            5           9
  C            4           6
  C            2           6

代码:

var df_flattened = df.select($"*", explode($"col2").as("flat")).select($"*",$"flat.col2_1",$"flat.col2_2").drop("col2")

我没有收到任何代码错误。但它在原始 DF 中的缺失值,其中 distinct(col1) 在原始数据中约为 20000,在展平后变为 ~6000。

关于错误的任何建议。

【问题讨论】:

col2中的数组可以为空吗? @ollik1 不,它不能为空。但它可以像上面的示例一样具有可变大小。 @ollik1 你是对的。 col2 的值在某些情况下为 null,并且这些记录丢失了。 【参考方案1】:

explode() 不会发出任何被分解的数组为null 的行。因此,您应该改用explode_outer()

【讨论】:

以上是关于在 Spark 丢失记录中爆炸 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spark 1.6以空值爆炸[重复]

Spark Sql 查询嵌套记录。我想先过滤嵌套的记录数组,然后爆炸(将它们展开成行)

Spark 在 Scala 中爆炸 - 将爆炸列添加到行

Bash字符串爆炸[重复]

Spark数据框爆炸功能

Spark (Scala) - 在 DataFrame 中恢复爆炸