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
Apache spark 避免在WHERE中使用SELECT_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark 避免在WHERE中使用SELECT

Apache spark 避免在WHERE中使用SELECT,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我在hdfs上有一个CSV格式的输入文件,带有以下COL:日期、时间、公共ip 使用它,我需要每天从一个相当大的表中过滤出大约100万行的数据。该表的结构大致如下: 创建表格大表格 `用户id`int, `ip`字符串, `timestamp_from`timestamp, `时间戳_至`时间戳 按'PARTITION_DATE'字符串分区 行格式SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 以输入格式存储 'org.apache.hadoo

我在hdfs上有一个CSV格式的输入文件,带有以下COL:日期、时间、公共ip

使用它,我需要每天从一个相当大的表中过滤出大约100万行的数据。该表的结构大致如下:

创建表格大表格 `用户id`int, `ip`字符串, `timestamp_from`timestamp, `时间戳_至`时间戳 按'PARTITION_DATE'字符串分区 行格式SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 以输入格式存储 'org.apache.hadoop.hive.ql.io.orc.orInputFormat'; 我需要读取CSV数据,然后过滤大表格,检查哪些用户ID在所选期间使用了所需的ip地址

我尝试使用spark SQL进行不同的连接,但运气不太好。无论我做什么,spark都不够聪明,无法限制每个分区的大表。我还尝试在csv文件中选择不同的日期时使用WHERE PARTITION\u DATE,但速度也相当慢

CSV最多应有20个不同的工作日左右。 这是我的解决方案-我最终选择了不同的日期并将其用作字符串:

spark.sql按日期从csv_文件组中选择日期。createOrReplaceTempViewcsv_文件_uniq_日期 val partitions=spark.sqlselect*from csv_file_uniq_date.collect.mkStringsep=,.replaceAll[\\[\\]], spark.sqlselect user_id,timestamp_from,timestamp_to from from from,timestamp_to from from from大_表,其中分区_日期在+分区+按用户_id分组,timestamp_from,timestamp_to.write.csvoutput.csv 现在,这项工作完成了——我将任务从1000个减少到数千个,但我对实现感到非常不满意。有人能给我指一下正确的方向吗?如何避免将其作为逗号分隔的分区值字符串来提取

使用spark 2.2

干杯

您所期望的是动态分区修剪,通过它Spark将足够聪明地解析分区以从直接连接条件中过滤

此功能可从Spark 3.0获得,作为自适应查询执行改进的一部分

从中查找更多详细信息


默认情况下它是禁用的,可以通过设置spark.sql.adaptive.enabled=true来启用它。据我所知,使用spark 2.2.*版本,您的方法会更好。从3.0版本开始,这将自动解决。如果答案对你有帮助,请向上投票。好的,这令人沮丧:。不过,谢谢你的帮助。