我在pyspark中有两个数据帧。我试图将一个数据帧与另一个数据帧进行比较,以查看值是否在范围内
下面是dataframe的一个示例
数据帧df:
数据帧dfcompare:
我正在寻找的输出:
我目前拥有的代码如下:
def cal_OTRC(spark_df):
compare = df.compare.fillna(0)
df = spark_df.agg(*(F.count(F.when((F.col(c) > compare.astype(int).values.tolist()[0]) | (F.col(c) < compare[c].astype(int).values.tolist()[1]), c)).alias(c) for c in spark_df.columns ))
return df
out_of_range_count = cal_OTRC(df).to_koalas().rename(index={0: 'outofRange'})
然而,这段代码适用于小表,但对于大表,这是非常缓慢的。对于大型表,可以做哪些改进来加快运行速度
您可以将
dfcompare
翻译成一个dict,每个列有一个min
和max
条目然后,如果值超出范围,列表达式可以计算每列
这将为每行和每列生成一个
0
或1
:最后对
out
列求和得到相关问题 更多 >
编程相关推荐