【发布时间】:2016-10-05 06:58:35
【问题描述】:
我正在尝试在 Hive 中创建一个表,该表是从具有以下数据格式的 spark 作业创建的:
{'Group1': {[start=0, end=20]: 'Data goes here'}}
用于此的 spark 数据框架构是:
MapType(StringType(),
MapType(StructType([
StructField('start', IntegerType(), False),
StructField('end', IntegerType(), False)]),
StringType()))
显示为:
root
|-- column_1: map (nullable = true)
| |-- key: string
| |-- value: map (valueContainsNull = true)
| | |-- key: struct
| | |-- value: string (valueContainsNull = true)
| | | |-- start: integer (nullable = true)
| | | |-- end: integer (nullable = true)
这似乎在 spark 中工作得很好,但是当我尝试从这个架构创建一个配置单元表时:
CREATE EXTERNAL TABLE test_table (
column_1 MAP<STRING, MAP<STRUCT<`start`:BIGINT,`end`:BIGINT>, STRING>>
)
STORED AS PARQUET
LOCATION 'path_to_files';
我明白了:
FAILED: ParseException cannot recognize input near 'STRUCT' '<' 'start' in primitive type specification
据我所知,它看起来像合法的表格结构。我找不到任何东西告诉我你不能将 struct 作为带有 hive 2.0 的 map 中的键,而 spark 2.0 可以很好地处理它。
【问题讨论】:
-
您的用例是什么?为什么要尝试使用 hive 命令创建 hive 表?
-
spark 数据帧可以通过两种方式创建,1) 直接从数据源 2) 从现有 RDD
-
用例是在 hive 中创建一个表以通过 prestoDB 集群进行查询。提到 spark 只是为了表明该构造似乎是合法的,并让人们了解模式是如何形成的。
-
删除开始和结束的单引号/反引号并尝试
标签: apache-spark hive pyspark