Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 使用Spark对拼花文件进行计数操作_Hadoop_Apache Spark_Parquet - Fatal编程技术网

Hadoop 使用Spark对拼花文件进行计数操作

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

我在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
我在spark UI上分析了这些查询,发现对已排序的_表的查询只读取127MB的数据,而对未排序的_表的查询读取35GB的数据以计算计数

因此,我的问题是:

  • Spark如何通过读取较少的数据来计算计数
  • 为什么排序表上的作业读取的数据比排序表上的作业少 未分类的表格

  • 拼花地板文件存储在称为行组的块中。对于每个字段/列,每个行组都可以有一些关联的元数据,包括行数、最小值和最大值。由于您的数据已排序,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
    列出。。。这可能是特定于实施的