我在hive中有一个表,它是使用hivejson serde方法从许多json文件创建的,serdeproperties('dots.in.keys'='true'),因为那里的一些键有一个点,比如'aaa.bbb'。我创建外部表,并对这些键使用反勾号。现在我有一个问题从pyspark脚本中删除这个表,使用 sqlContext.sql("DROP TABLE IF EXISTS "+table_name)
,我收到以下错误消息:
An error occurred while calling o63.sql.
: org.apache.spark.SparkException: Cannot recognize hive type string: struct<associations:struct<aaa.bbb:array<string> ...
Caused by: org.apache.spark.sql.catalyst.parser.ParseException:
mismatched input '.' expecting ':'(line 1, pos 33)
== SQL ==
struct<associations:struct<aaa.bbb:array<string>,...
---------------------------------^^^
总之,我可以毫无问题地放下这张table。是我做错了,还是有更好的方法?
1条答案
按热度按时间tyu7yeag1#
看起来不可能像我所希望的那样,使用pyspark脚本中的sqlcontext.sql(“…”),使用hivejson-serde方法创建的配置单元表,键中有点。如果我想删除这样的配置单元表,或者创建它(还没有尝试其他方法),总是会出现相同的错误。因此,我的解决方法是使用python os.system()并通过配置单元本身执行所需的查询:
create table query更复杂,因为我们需要用“\”转义backticks:
它输出一些额外的Hive相关的信息,但工作!