Apache spark EMR和外部配置单元/胶水上的Pyspark-可以通过sqlContext删除但不能创建表

Apache spark EMR和外部配置单元/胶水上的Pyspark-可以通过sqlContext删除但不能创建表,apache-spark,pyspark,hive,amazon-emr,aws-glue,Apache Spark,Pyspark,Hive,Amazon Emr,Aws Glue,我正在从运行在EMR上的pyspark向外部配置单元表写入数据帧。这项工作涉及从外部配置单元表中删除/截断数据,将数据帧的内容写入前面提到的表中,然后将数据从配置单元写入DynamoDB。我希望写入EMR集群上的内部表,但目前我希望配置单元数据可用于后续集群。我可以直接写入Glue目录并强制它注册,但这比我需要做的还要多 所有组件在给定的EMR集群上都可以单独工作:我可以使用脚本或ssh和配置单元外壳在EMR上创建一个外部配置单元表。雅典娜可以查询此表,pyspark可以读取此表。我可以在pys

我正在从运行在EMR上的pyspark向外部配置单元表写入数据帧。这项工作涉及从外部配置单元表中删除/截断数据,将数据帧的内容写入前面提到的表中,然后将数据从配置单元写入DynamoDB。我希望写入EMR集群上的内部表,但目前我希望配置单元数据可用于后续集群。我可以直接写入Glue目录并强制它注册,但这比我需要做的还要多

所有组件在给定的EMR集群上都可以单独工作:我可以使用脚本或ssh和配置单元外壳在EMR上创建一个外部配置单元表。雅典娜可以查询此表,pyspark可以读取此表。我可以在pyspark中创建一个dataframe并将覆盖数据插入到前面提到的表中。 然后,我可以使用配置单元shell将数据从配置单元表复制到DynamoDB表中

我希望将所有工作打包到一个pyspark脚本中,而不必提交多个不同的步骤。 我可以使用
sqlContext.sql(“如果存在默认值,则删除表。我的表”)

当我尝试使用
sqlContext.sql(“create table default.mytable(id string,val string)存储为ORC”)创建表时,
我遇到以下错误:

org.apache.hadoop.net.ConnectTimeoutException:从ip xx xxx xx xxx/xx.xxx.xx.xx到ip xxx xx xx:8020的调用在套接字超时时失败异常:org.apache.hadoop.net.ConnectTimeoutException:等待通道准备好连接时超时20000毫秒。ch:java.nio.channels.SocketChannel[connectionpending remote=ipxxx-xx-xx:8020];有关更多详细信息,请参阅:

我不明白为什么我可以在集群上使用配置单元外壳在Glue中创建外部配置单元表,使用配置单元外壳或pyspark sqlcontext删除表,但我不能使用sqlcontext创建表。我已经检查过了,提供的解决方案在这个上下文(复制hive site.xml)中没有意义,因为我可以清楚地写入所需的地址,没有任何麻烦,只是在pyspark中没有。更奇怪的是,当我在雅典娜登记时,我可以把桌子放下,而它们肯定是放下的

运行于: emr-5.28.0, Hadoop发行版Amazon 2.8.5 Spark 2.4.4 蜂巢2.3.6
Livy 0.6.0(适用于笔记本电脑,但我的实验是通过ssh和pyspark shell进行的)

结果表明,只要我提供了表的位置,我就可以通过spark.sql()调用创建表。似乎HiveShell不需要它,但是spark.sql()需要它。这并非意料之中,但也并非完全不令人惊讶