Pyspark SQL计数返回不同的行数比纯的sql(Pyspark sql count retur

2019-11-04 14:34发布

我在我的项目之一使用pyspark开始。 我在测试不同的命令,探索图书馆的功能,我发现的东西,我不明白。

把这个代码:

from pyspark import SparkContext
from pyspark.sql import HiveContext
from pyspark.sql.dataframe import Dataframe

sc = SparkContext(sc)
hc = HiveContext(sc)

hc.sql("use test_schema")
hc.table("diamonds").count()

据最新统计()操作返回53941分的记录。 如果我运行,而不是从钻石SELECT COUNT(*)在蜂巢我得到了53940。

是pyspark计数包括头?

我试图寻找到:

df = hc.sql("select * from diamonds").collect()
df[0]
df[1]

看是否包含标题:

df[0] --> Row(carat=None, cut='cut', color='color', clarity='clarity', depth=None, table=None, price=None, x=None, y=None, z=None)
df[1] -- > Row(carat=0.23, cut='Ideal', color='E', clarity='SI2', depth=61.5, table=55, price=326, x=3.95, y=3.98, z=2.43)

第0个元素看起来并不像头。

任何人有对此的解释?

谢谢! 麦酒

Answer 1:

当陈旧的统计数据用于加速计算蜂巢可以提供不正确的计数。 要查看是否是这样的问题,在蜂房尝试:

SET hive.compute.query.using.stats=false;
SELECT COUNT(*) FROM diamonds;

另外,刷新统计信息。 如果您的表未分区:

ANALYZE TABLE diamonds COMPUTE STATISTICS;
SELECT COUNT(*) FROM diamonds;

如果分区:

ANALYZE TABLE diamonds PARTITION(partition_column) COMPUTE STATISTICS;

另外再看看你的第一行( df[0]你的问题)。 它看起来像一个格式不正确的标题行。



文章来源: Pyspark sql count returns different number of rows than pure sql