代码之家  ›  专栏  ›  技术社区  ›  vikrant rana

使用bucketBy的Spark架构与配置单元不兼容

  •  1
  • vikrant rana  · 技术社区  · 8 年前

    我使用sparkversion2.3来编写和保存数据帧 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
    

    如何将数据帧保存并写入一个配置单元表,以便以后查看?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ged    8 年前

    所有其他DF Writer方法都允许通过Hive和Impala编辑器从这些带边框的表中进行后续选择,但它们不是带火花的。

    您需要从bucketed via中进行选择spark.read公司. ...

    这将有助于: https://spark.apache.org/docs/latest/sql-programming-guide.html

    你的问题的答案是,目前不可能选择通过蜂巢或黑斑羚从火花扣表。

        2
  •  1
  •   jmng    6 年前

    而Spark(至少在<=2.4版本中)不直接支持Hive的bucketing格式,如前所述 here 和 here

    //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")
    
    推荐文章