我有一个很大的spark表,其中包含混合数据类型String,arrays,maps 本质上,array和map列是稀疏的。我应该在这些列的值中保留空数组还是使它们为null? 同样,建议使用空字符串“”进行存储还是使用null? 有什么好的做法,两者都有优点和缺点?
答案 0 :(得分:1)
通常来说,我总是会尝试使用NULL
值而不是空字符串或数组。我的主要原因是他如何在火花中处理它们,例如连接两个数据帧时。在连接中将忽略NULL
值,但不会忽略空字符串或列表。这通常会导致数据偏斜,从而严重降低转换速度。可以在here [external link]中找到有关偏斜数据的一些信息。
此外,NULL
值在诸如 [docs]或coalesce
的列[related question],count
之类的列[docs],first(col, ignorenulls=True)
等函数中也经常被忽略{{3}}。如果您想按预期使用这些功能,我还建议对空字符串/列表使用NULL
。
总而言之:在其他值(例如空字符串或列表)上使用NULL
可以让您从更多的本机Spark功能中获利,我建议尽可能使用NULL
。