我在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
答案 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()