我已经开始在我的一个项目中使用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条记录。如果我在Hive中运行从钻石中选择计数(*),我得到了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个元素看起来不像标题。
有人对此有解释吗?
谢谢! 麦酒
答案 0 :(得分:3)
当陈旧统计用于加速计算时,Hive可以提供不正确的计数。要查看这是否是问题,请在Hive中尝试:
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]
)。它看起来像一个格式不正确的标题行。