Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 从配置单元元存储加载的Spark 2.1表具有空值_Apache Spark_Hive_Apache Spark Sql_Emr_Metastore - Fatal编程技术网

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
目标群集是一个EMR群集,具有:

  • Spark 2.1.1
  • 蜂巢2.1.1
  • S3
要迁移表,我执行了以下操作:

  • 将数据从HDFS复制到S3
  • 运行
    SHOW CREATE TABLE my_TABLE
  • 修改返回的create查询-将
    位置
    从HDFS路径更改为S3路径
  • 在目标群集的配置单元上运行修改后的查询
  • 从my_表中运行
    SELECT*。这将返回0行(预期)
  • 运行
    MSCK修复表my_表。这将按预期进行传递,并在元存储中注册分区
  • 运行
    从my_表中选择*限制10-10行返回的值正确
  • 在目标集群上,从配置为使用配置单元元存储的Spark运行以下代码:
    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

    为什么会这样?怎么能修好呢