如果没有可用的指定分区路径,SPARK SQL将失败

时间:2017-12-21 22:45:05

标签: python hadoop apache-spark hive pyspark

我在EMR中使用Hive Metastore。我可以通过HiveSQL手动查询表 但是当我在Spark Job中使用相同的表时,它表示 输入路径不存在:s3://

  

引起:org.apache.hadoop.mapred.InvalidInputException:输入路径   不存在:s3:// ....

我已经在s3://中删除了我的上面的分区路径但是它仍然可以在我的Hive中运行,而不会在表级别删除分区。但它还没有在pyspark工作

这是我的完整代码

from pyspark import SparkContext, HiveContext
from pyspark import SQLContext
from pyspark.sql import SparkSession

sc = SparkContext(appName = "test")
sqlContext = SQLContext(sparkContext=sc)
sqlContext.sql("select count(*) from logan_test.salary_csv").show()
print("done..")

我提交了我的工作如下,以使用配置单目录表。

spark-submit test.py --files /usr/lib/hive/conf/hive-site.xml

1 个答案:

答案 0 :(得分:1)

我遇到了与HDFS类似的错误,其中Metastore为表保留了分区,但目录丢失了

检查s3 ...如果缺少,或者您将其删除,则需要从Hive运行MSCK REPAIR TABLE。有时这不起作用,实际上你确实需要一个DROP PARTITION

默认情况下该属性为false,但您通过将SparkConf对象传递给SparkContext来设置配置属性

from pyspark import SparkConf, SparkContext

conf = SparkConf().setAppName("test").set("spark.sql.hive.verifyPartitionPath", "false"))
sc = SparkContext(conf = conf)

或者,Spark 2方式使用的是SparkSession。

from pyspark.sql import SparkSession

spark = SparkSession.builder \
...     .appName("test") \
...     .config("spark.sql.hive.verifyPartitionPath", "false") \
...     .enableHiveSupport()
...     .getOrCreate()