spark架构与hive不兼容

jtw3ybtb  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(507)

我使用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保存并写入一个配置单元表,以便以后查看?

vsmadaxz

vsmadaxz1#

虽然spark(至少在版本<=2.4中)不直接支持hive的bucketing格式,如这里和这里所描述的,但是通过使用sparksql将数据加载到hive中,可以让spark输出hive可读的bucketed数据;按照您的示例,它将类似于:

//enable Hive support when creating/configuring the spark session
val spark = SparkSession.builder().enableHiveSupport().getOrCreate()

//register DF as view that can be used with SparkSQL
DF.createOrReplaceTempView("bucketed_df")

//create Hive table, can also be done manually on Hive
val createTableSQL = "CREATE TABLE bucketed_table1 (col1 int, col2 string) CLUSTERED BY col1 INTO 20 BUCKETS STORED AS PARQUET"
spark.sql(createTableSQL)

//load data from DF into Hive, output parquet files will be bucketed and readable by Hive
spark.sql("INSERT INTO bucketed_table1 SELECT * FROM bucketed_df")
bjg7j2ky

bjg7j2ky2#

所有其他df writer方法都允许通过hive和impala编辑器从这些带边框的表中进行后续选择,但它们不是带Spark的。
您需要通过spark.read从bucketed中选择。。。
这将有助于:https://spark.apache.org/docs/latest/sql-programming-guide.html
你的问题的答案是,目前不可能选择通过Hive或 Impala 从Spark扣表。

相关问题