Apache spark 从配置单元元存储加载的Spark 2.1表具有空值
我正在尝试将表定义从一个配置单元元存储迁移到另一个配置单元元存储 源群集具有:Apache spark 从配置单元元存储加载的Spark 2.1表具有空值,apache-spark,hive,apache-spark-sql,emr,metastore,Apache Spark,Hive,Apache Spark Sql,Emr,Metastore,我正在尝试将表定义从一个配置单元元存储迁移到另一个配置单元元存储 源群集具有: Spark 1.6.0 蜂巢1.1.0(cdh) HDFS 目标群集是一个EMR群集,具有: Spark 2.1.1 蜂巢2.1.1 S3 要迁移表,我执行了以下操作: 将数据从HDFS复制到S3 运行SHOW CREATE TABLE my_TABLE 修改返回的create查询-将位置从HDFS路径更改为S3路径 在目标群集的配置单元上运行修改后的查询 从my_表中运行SELECT*。这将返回0行(预期)
- Spark 1.6.0
- 蜂巢1.1.0(cdh)
- HDFS
- Spark 2.1.1
- 蜂巢2.1.1
- S3
SHOW CREATE TABLE my_TABLE源集群中的代码>
位置
从HDFS路径更改为S3路径SELECT*代码>。这将返回0行(预期)
MSCK修复表my_表代码>。这将按预期进行传递,并在元存储中注册分区
从my_表中选择*限制10代码>-10行返回的值正确
Spark.sql(“从我的表格限制10中选择*).show()
-这将返回空值李>
Spark SQL查询返回的结果具有所有正确的列和正确的行数,但所有值均为null
要使Spark正确加载值,我可以将以下属性添加到创建查询的tblproperty
部分:
'spark.sql.partitionProvider'='catalog',
'spark.sql.sources.provider'='org.apache.spark.sql.parquet',
'spark.sql.sources.schema.numPartCols'='<partition-count>',
'spark.sql.sources.schema.numParts'='1',
'spark.sql.sources.schema.part.0'='<json-schema as seen by spark>'
'spark.sql.sources.schema.partCol.0'='<partition name 1>',
'spark.sql.sources.schema.partCol.1'='<partition name 2>',
...
'spark.sql.partitionProvider'='catalog',
'spark.sql.sources.provider'='org.apache.spark.sql.parquet',
'spark.sql.sources.schema.numPartCols'='',
'spark.sql.sources.schema.numParts'='1',
'spark.sql.sources.schema.part.0'='
'spark.sql.sources.schema.partCol.0'='',
'spark.sql.sources.schema.partCol.1'='',
...
这个问题的另一方面是,在源集群中,Spark读取表值时没有任何问题,也没有额外的tblproperty
为什么会这样?怎么能修好呢