什么是推荐的-在spark表中保留空列表/数组与Null



我有一个大的spark表,其中包含混合的数据类型String、arrays、maps数组和映射列本质上是稀疏的。我应该在这些列的值中保留空数组还是将它们设为null?类似地,建议使用空字符串""用于存储还是为空?什么是好的做法以及两者的优点和缺点?

一般来说,我总是尝试使用NULL值,而不是空字符串或数组。对我来说,主要原因是他如何在spark中处理它们,例如在连接两个数据帧时。联接中会忽略NULL值,但不会忽略空字符串或列表。这通常会导致数据失真,从而大大降低转换速度。关于偏斜数据的一些信息可以在这里找到[外部链接]。

此外,在列[docs]的coalesce、聚合[相关问题]的countfirst(col, ignorenulls=True)[docs]等函数中,NULL值也经常被忽略。如果您想按预期使用这些函数,我还建议在空字符串/列表上使用NULL

综上所述:使用NULL而不是空字符串或列表等其他值,可以让您获得更多本机Spark功能,我建议尽可能使用NULL

最新更新