Apache spark Pyspark sql count返回的行数与纯sql不同

Apache spark Pyspark sql count返回的行数与纯sql不同,apache-spark,hive,pyspark,pyspark-sql,Apache Spark,Hive,Pyspark,Pyspark Sql,我已经开始在我的一个项目中使用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.t

我已经开始在我的一个项目中使用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()
最后一个count()操作返回53941条记录。如果我运行一个select count(*)从蜂巢中的钻石中得到53940

那是包括头球在内的Pypark计数吗

我试图调查:

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个元素看起来不像标题

有人对此有解释吗

谢谢!
当使用过时的统计数据加速计算时,Ale

配置单元可能会给出不正确的计数。要查看这是否是问题所在,请在配置单元中尝试:

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;
如果已分区:

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

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

当使用过时的统计数据来加速计算时,配置单元可能会给出不正确的计数。要查看这是否是问题所在,请在配置单元中尝试:

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;
如果已分区:

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

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

当您使用
hc.read.table(…).count()
?@Bala当我运行时,我得到了53941I,我用1.6对它进行了测试,并且所有这些都返回相同的计数。你用的是什么版本?创建两个df,让您获得不同的计数,并从另一个df中减去不同的行并让我们知道。我尝试了不同的计数操作组合
hc.sql(“从菱形中选择计数(*)).show()
hc.read.table().count()
hc.table(…).count()
,全部返回53491。Spark版本是2.1.0,pyspark 2.1.1当你使用
hc.read.table(…).count()
?@Bala当我运行时,我得到了53941I,我用1.6对它进行了测试,它们都返回相同的计数。你用的是什么版本?创建两个df,让您获得不同的计数,并从另一个df中减去不同的行并让我们知道。我尝试了不同的计数操作组合
hc.sql(“从菱形中选择计数(*)).show()
hc.read.table().count()
hc.table(…).count()
,全部返回53491。Spark版本是2.1.0,pyspark版本是2.1。1@savagedata你是对的,这有助于理解为什么蜂巢计算错误的行数。谢谢@如果你是对的,这有助于理解为什么蜂巢计算错误的行数。谢谢