我使用sparkversion2.3来编写和保存Dataframe bucketBy
.
在配置单元中创建表,但不是使用正确的架构。我无法从配置单元表中选择任何数据。
(DF.write
.format('orc')
.bucketBy(20, 'col1')
.sortBy("col2")
.mode("overwrite")
.saveAsTable('EMP.bucketed_table1'))
我收到以下信息:
持久化数据源表 emp
. bucketed_table1
以特定于spark sql的格式导入配置单元metastore,该格式与配置单元不兼容。
正在创建配置单元架构,如下所示:
hive> desc EMP.bucketed_table1;
OK
col array<string> from deserializer
如何将Dataframe保存并写入一个配置单元表,以便以后查看?
2条答案
按热度按时间vsmadaxz1#
虽然spark(至少在版本<=2.4中)不直接支持hive的bucketing格式,如这里和这里所描述的,但是通过使用sparksql将数据加载到hive中,可以让spark输出hive可读的bucketed数据;按照您的示例,它将类似于:
bjg7j2ky2#
所有其他df writer方法都允许通过hive和impala编辑器从这些带边框的表中进行后续选择,但它们不是带Spark的。
您需要通过spark.read从bucketed中选择。。。
这将有助于:https://spark.apache.org/docs/latest/sql-programming-guide.html
你的问题的答案是,目前不可能选择通过Hive或 Impala 从Spark扣表。