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

Python 如果没有指定的可用分区路径,SPARK SQL将失败,python,hadoop,apache-spark,hive,pyspark,Python,Hadoop,Apache Spark,Hive,Pyspark,我正在EMR中使用Hive Metastore。我可以通过HiveSQL手动查询表。 但是,当我在Spark作业中使用同一个表时,它表示输入路径不存在:s3:// 原因:org.apache.hadoop.mapred.InvalidInputException:输入路径 不存在:s3:// 我已经在s3中删除了上面的分区路径:/。。但它仍然可以在我的配置单元中工作,而不会在表级别删除分区。但无论如何,它在pyspark中都不起作用 这是我的全部代码 from pyspark import Sp

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

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

我已经在s3中删除了上面的分区路径:/。。但它仍然可以在我的配置单元中工作,而不会在表级别删除分区。但无论如何,它在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

我在HDFS中遇到了类似的错误,其中元存储为表保留了一个分区,但缺少目录

检查s3。。。如果缺少或删除了它,则需要从配置单元运行
MSCK修复表
。有时这不起作用,实际上您需要一个
DROP分区

默认情况下,该属性为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()

我在HDFS中也遇到过类似的错误,其中Metastore为表保留了一个分区,但缺少目录

检查s3。。。如果缺少或删除了它,则需要从配置单元运行
MSCK修复表
。有时这不起作用,实际上您需要一个
DROP分区

默认情况下,该属性为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()

尝试在路径中使用's3a://'而不是's3://',s3://可以很好地与其他表配合使用,并且同一个表在配置单元中也可以很好地工作!1) 如果要与配置单元对话,请停止使用SQLContext。2) 您需要在上显式启用HIVESupport()SparkSession@cricket_007:是的!这是我前面的例子。我已经在新版本中更正了!thankstry在路径s3://中使用's3a://'而不是's3://'可以很好地与其他表一起工作,并且同一个表在Hive中也可以很好地工作!1) 如果要与配置单元对话,请停止使用SQLContext。2) 您需要在上显式启用HIVESupport()SparkSession@cricket_007:是的!这是我前面的例子。我已经在新版本中更正了!谢谢,我也会犯同样的错误。我已经设置了
spark=SparkSession.builder.appName(“配置单元示例”).config(“spark.sql.Hive.verifyPartitionPath”,“false”).enableHiveSupport().getOrCreate()
,原因是:org.apache.hadoop.mapred.InvalidInputException:输入路径不存在:s3://好的,那么该属性不是您的问题。。。你的问题是如何配置SparkWhere你有没有读到这是上述错误的解决方案?你能显示完整的堆栈跟踪吗?好的。我想我需要设置这个配置。但它似乎不是。我已经修改了我的问题作为
我已经删除了我在s3中的分区路径://。。但它仍然可以在我的配置单元中工作,而不会在表级别删除分区。但它在pyspark中无论如何都不起作用
请看一看。对不起,我也有同样的错误。我已经设置了
spark=SparkSession.builder.appName(“配置单元示例”).config(“spark.sql.Hive.verifyPartitionPath”,“false”).enableHiveSupport().getOrCreate()
,原因是:org.apache.hadoop.mapred.InvalidInputException:输入路径不存在:s3://好的,那么该属性不是您的问题。。。你的问题是如何配置SparkWhere你有没有读到这是上述错误的解决方案?你能显示完整的堆栈跟踪吗?好的。我想我需要设置这个配置。但它似乎不是。我已经修改了我的问题作为
我已经删除了我在s3中的分区路径://。。但它仍然可以在我的配置单元中工作,而不会在表级别删除分区。但它在pyspark中无论如何都不起作用
请看一看。很抱歉给你带来了混乱