Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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 Spark SQL忽略动态分区筛选器值_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark Spark SQL忽略动态分区筛选器值

Apache spark Spark SQL忽略动态分区筛选器值,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,AWS中EMR 5.20上的Spark 2.4出现问题 我有一个字符串列作为分区,它有日期值。我的目标是将此列的最大值作为筛选器引用。2019年1月1日的值如图2019-01-01所示 在这个查询中,我试图过滤到一个特定的日期值,它是一个字符串数据类型,Spark最终读取所有目录,而不仅仅是结果maxvalue 但是,在本例中,如果我硬编码该值,它只读取正确的目录 spark.sql("select mypartitioncolumn, column1, column2 from mydatab

AWS中EMR 5.20上的Spark 2.4出现问题

我有一个字符串列作为分区,它有日期值。我的目标是将此列的最大值作为筛选器引用。2019年1月1日的值如图2019-01-01所示

在这个查询中,我试图过滤到一个特定的日期值,它是一个字符串数据类型,Spark最终读取所有目录,而不仅仅是结果maxvalue

但是,在本例中,如果我硬编码该值,它只读取正确的目录

spark.sql("select mypartitioncolumn, column1, column2 from mydatabase.mytable where mypartitioncolumn= '2019-01-01' group by 1,2,3 ").show
为什么Spark不能以相同的方式识别这两种方法?我确保如果从myothertable查询中运行select maxmypartitioncolumn,它将显示与硬编码方法完全相同的值以及相同的数据类型


除了数据类型差异之外,我在文档中找不到任何区别分区查询的东西。我检查以确保源表和值中的模式都是字符串类型,并尝试将我的值转换为字符串,以及将myothertable中的select maxmypartitioncolumn转换为字符串,这没有任何区别

通过更改配置来解决问题

sql("set spark.sql.hive.convertMetastoreParquet = false")
Spark docs


在读取和写入Hive metastore拼花表时,Spark SQL将尝试使用自己的拼花支持,而不是Hive SerDe,以获得更好的性能。此行为由spark.sql.hive.convertMetastoreParquet配置控制,默认情况下处于打开状态。

请参考以下链接中提到的解决方案,并告知其是否有效。我在spark中测试了它,同时从Hive分区表读取分区,该表在日期列上分区。谢谢
sql("set spark.sql.hive.convertMetastoreParquet = false")