spark.sql(配置单元)架构与Cassandra架构不匹配

时间:2019-07-19 00:42:18

标签: apache-spark hive schema

所以我试图在spark.sql中执行一个简单的select语句,但是即使该列明显存在于Cassandra表中,它也会出现错误:

// Spark ------------------------------------    
spark.sql("SELECT value2 FROM myschema.mytable").show()

>> org.apache.spark.sql.AnalysisException: cannot resolve '`value2`' 
   given input columns: [key, value1]

// Cassandra --------------------------------
DESCRIBE myschema.mytable;

>> CREATE TABLE mytable.myschema (
>>    key int,
>>    value1 text,
>>    value2 text,
>>    PRIMARY KEY (key)
>> ) WITH ...;

我认为配置单元只是未正确同步,但是运行表刷新命令不起作用。 spark.sql("REFRESH TABLE myschema.mytable")
参见https://spark.apache.org/docs/2.1.2/sql-programming-guide.html#metadata-refreshing

我可以正确刷新的唯一方法是:

  1. 将所有数据移出表
  2. 删除表格
  3. 删除配置单元元数据行
    DELETE FROM "HiveMetaStore".sparkmetastore WHERE key='_2_myschema' AND entity='org.apache.hadoop.hive.metastore.api.Table::mytable';
  4. 重新创建表格
  5. 复制所有数据

肯定有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

这在我的Spark环境中仍然是一个问题,但是我发现仅截断或删除"HiveMetaStore".sparkmetastore表中的特定记录似乎在5分钟后即可正确刷新。
即使不重新启动Spark会话,此方法也可以工作。