我是Python和apachespark的新手,我试图理解pyspark.sql.functions函数.corr(val1,val2)“工程。你知道吗
我有汽车品牌,年龄和价格的大数据框。我想得到每个汽车品牌的年龄和价格之间的相关性。你知道吗
我有两个解决方案:
//get all brands
get_all_maker = data.groupBy("brand").agg(F.count("*").alias("counts")).collect()
for row in get_all_maker:
print(row["brand"],": ",data.filter(data["brand"]==row["brand"]).corr("age","price"))
这个解决方案很慢,因为我经常使用“corr”。你知道吗
所以我试着用一个聚合:
get_all_maker_corr = data.groupBy("brand").agg(
F.count("*").alias("counts"),
F.corr("age","price").alias("correlation")).collect()
for row in get_all_maker_corr:
print(row["brand"],": ",row["correlation"])
如果我尝试比较结果,它们是不同的。但为什么呢?你知道吗
我举了一些简单的例子。这里我生成简单的数据帧:
让我们测试两种方法:
他们两个都给了我相同的答案:
让我们向数据框中添加另一个无值项:
在第一个版本中,您将得到以下结果:
第二个版本给你带来了其他的结果:
我想,那数据帧过滤器使用corr函数将None值设置为0值。你知道吗
以及数据帧.groupBy在agg中使用F.corr函数时,函数将忽略None值。你知道吗
所以,这两种方法是不相等的。我不知道,如果这是一个bug或者Spark系统的一个特性,但是如果你想计算相关值,那么应该只使用没有值的数据。你知道吗
相关问题 更多 >
编程相关推荐