建议采取什么措施-在火花表中保留空列表/数组与空值?

时间:2020-10-16 20:56:27

标签: apache-spark pyspark apache-spark-sql null

我有一个很大的spark表,其中包含混合数据类型String,arrays,maps 本质上,array和map列是稀疏的。我应该在这些列的值中保留空数组还是使它们为null? 同样,建议使用空字符串“”进行存储还是使用null? 有什么好的做法,两者都有优点和缺点?

1 个答案:

答案 0 :(得分:1)

通常来说,我总是会尝试使用NULL值而不是空字符串或数组。我的主要原因是他如何在火花中处理它们,例如连接两个数据帧时。在连接中将忽略NULL值,但不会忽略空字符串或列表。这通常会导致数据偏斜,从而严重降低转换速度。可以在here [external link]中找到有关偏斜数据的一些信息。

此外,NULL值在诸如 [docs]coalesce的列[related question]count之类的列[docs]first(col, ignorenulls=True)等函数中也经常被忽略{{3}}。如果您想按预期使用这些功能,我还建议对空字符串/列表使用NULL

总而言之:在其他值(例如空字符串或列表)上使用NULL可以让您从更多的本机Spark功能中获利,我建议尽可能使用NULL