优化大量列的不同值
Optimize distinct values on a large number of columns
我需要计算大量列(>20,000)的不同值。我现在正在使用 pyspark.sql.functions.approxCountDistinct() 来获取每列的非重复计数的近似值。那是超快的(HyperLogLog)。之后,如果非重复计数低于某个阈值(如 10),我们需要这些值。我有一个执行此操作的循环。
distinct_values_list[cname] = df.select(cname).distinct().collect()
大部分时间都非常慢,我有很多列要处理,可能是列的一半 (10K)。有没有办法让 spark 一次做很多列?似乎它只会并行化每一列,但不能同时处理多列。
感谢我能得到的任何帮助。
假设每列中只有 2 个值。那么唯一组合的数量就是2^20000 =~ 10^7000。这是 1 和 7000 个零。如果某些列中的值超过 2 个,则此数字会更高。
修改你的模型。所有列真的是独立的吗?难道这些列中有许多只是代表同一维度的不同值吗?然后可能你可以从根本上减少列数。
考虑一下您是否使用了正确的工具。可能是一些完全不同的方法(Neo4j,...)更适合?
(更新)
不确定,它足够快,但您可能想尝试一下
import pyspark.sql.functions as F
df.select(*[
F.collect_set(c).alias(c)
for c in LIST_10k_COLS
]).collect()
我需要计算大量列(>20,000)的不同值。我现在正在使用 pyspark.sql.functions.approxCountDistinct() 来获取每列的非重复计数的近似值。那是超快的(HyperLogLog)。之后,如果非重复计数低于某个阈值(如 10),我们需要这些值。我有一个执行此操作的循环。
distinct_values_list[cname] = df.select(cname).distinct().collect()
大部分时间都非常慢,我有很多列要处理,可能是列的一半 (10K)。有没有办法让 spark 一次做很多列?似乎它只会并行化每一列,但不能同时处理多列。
感谢我能得到的任何帮助。
假设每列中只有 2 个值。那么唯一组合的数量就是2^20000 =~ 10^7000。这是 1 和 7000 个零。如果某些列中的值超过 2 个,则此数字会更高。
修改你的模型。所有列真的是独立的吗?难道这些列中有许多只是代表同一维度的不同值吗?然后可能你可以从根本上减少列数。
考虑一下您是否使用了正确的工具。可能是一些完全不同的方法(Neo4j,...)更适合?
(更新) 不确定,它足够快,但您可能想尝试一下
import pyspark.sql.functions as F
df.select(*[
F.collect_set(c).alias(c)
for c in LIST_10k_COLS
]).collect()