我有一个大的spark表,其中包含混合数据类型string、arrays、maps数组和map列本质上是稀疏的。我应该在这些列的值中保留空数组还是将它们设为null?类似地,建议使用空字符串“”存储还是空字符串?好的做法是什么?两者的优缺点是什么?
xytpbqjk1#
一般来说,我总是尽量用 NULL 值而不是空字符串或数组。我的主要原因是他在spark中如何处理它们,例如连接两个Dataframe时。 NULL 在联接中忽略值,但不忽略空字符串或列表。这通常会导致数据非常倾斜,这会严重减慢转换速度。关于倾斜数据的一些信息可以在这里找到[外部链接]。此外, NULL 值在函数中也经常被忽略,例如 coalesce 列[docs], count 聚合[相关问题]或 first(col, ignorenulls=True) [文档]。如果您想按预期的方式使用这些函数,我还建议您使用 NULL 超过空字符串/列表。总结一下:使用 NULL 与其他值(如空字符串或列表)相比,它允许您获得更多本机spark功能,我建议您使用 NULL 如果可能的话。
NULL
coalesce
count
first(col, ignorenulls=True)
1条答案
按热度按时间xytpbqjk1#
一般来说,我总是尽量用
NULL
值而不是空字符串或数组。我的主要原因是他在spark中如何处理它们,例如连接两个Dataframe时。NULL
在联接中忽略值,但不忽略空字符串或列表。这通常会导致数据非常倾斜,这会严重减慢转换速度。关于倾斜数据的一些信息可以在这里找到[外部链接]。此外,
NULL
值在函数中也经常被忽略,例如coalesce
列[docs],count
聚合[相关问题]或first(col, ignorenulls=True)
[文档]。如果您想按预期的方式使用这些函数,我还建议您使用NULL
超过空字符串/列表。总结一下:使用
NULL
与其他值(如空字符串或列表)相比,它允许您获得更多本机spark功能,我建议您使用NULL
如果可能的话。