所以我试图在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
我可以正确刷新的唯一方法是:
DELETE FROM "HiveMetaStore".sparkmetastore WHERE key='_2_myschema' AND entity='org.apache.hadoop.hive.metastore.api.Table::mytable';
肯定有更好的方法吗?
答案 0 :(得分:0)
这在我的Spark环境中仍然是一个问题,但是我发现仅截断或删除"HiveMetaStore".sparkmetastore
表中的特定记录似乎在5分钟后即可正确刷新。
即使不重新启动Spark会话,此方法也可以工作。