因此,我尝试在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-令人耳目一新
唯一能让它正常刷新的方法是:
将所有数据移出表
放下table
删除配置单元元数据行 DELETE FROM "HiveMetaStore".sparkmetastore WHERE key='_2_myschema' AND entity='org.apache.hadoop.hive.metastore.api.Table::mytable';
重新创建表
复制所有数据
当然有更好的办法吗?
1条答案
按热度按时间9rygscc11#
在我的spark环境中,这仍然是一个问题,但是我发现仅仅在
"HiveMetaStore".sparkmetastore
大约5分钟后,table似乎恢复正常。即使不重新启动spark会话,这也可以工作。