Hadoop 使用Spark对拼花文件进行计数操作
我在HDFS中有两组拼花格式的相同数据。Hadoop 使用Spark对拼花文件进行计数操作,hadoop,apache-spark,parquet,Hadoop,Apache Spark,Parquet,我在HDFS中有两组拼花格式的相同数据。 一组按col1排序,另一组未排序。排序的_表约为127GB,未排序的_表约为117GB。 这里的尺寸不重要 我使用Spark SQL运行了以下两个查询: select col1, count(*) from sorted_table where col1 = someInt group by col1 select col1, count(*) from unsorted_table where col1 = someInt group by col1
一组按
col1
排序,另一组未排序。排序的_表约为127GB,未排序的_表约为117GB。
这里的尺寸不重要
我使用Spark SQL运行了以下两个查询:
select col1, count(*) from sorted_table where col1 = someInt group by col1
select col1, count(*) from unsorted_table where col1 = someInt group by col1
我在spark UI上分析了这些查询,发现对已排序的_表的查询只读取127MB的数据,而对未排序的_表的查询读取35GB的数据以计算计数
因此,我的问题是:
拼花地板文件存储在称为行组的块中。对于每个字段/列,每个行组都可以有一些关联的元数据,包括行数、最小值和最大值。由于您的数据已排序,Spark可以根据这些范围跳过数据上的大块 使用
parquet\u reader
,这里是我的一个拼花文件的摘录:
Column 2
, values: 35957, null values: 0, distinct values: 0
max: 17305, min: 17305
compression: SNAPPY, encodings: RLE PLAIN
uncompressed size: 143866, compressed size: 6800
这是一个DATE
字段,所有值都相同,因此最大值和最小值都相同。但如果我要查找特定的日期范围,Spark可以使用它来确定实际数据是否值得检查
此处有关于行组的更多信息:
但是我没有看到min
和max
列出。。。这可能是特定于实施的