当前位置: 首页 > 知识库问答 >
问题:

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

景恩
2023-03-14

我正在使用Spark Version2.3使用Bucketby编写和保存数据。

表在配置单元中创建,但没有使用正确的模式。我无法从配置单元表中选择任何数据。

(DF.write
   .format('orc')
   .bucketBy(20, 'col1')
   .sortBy("col2")
   .mode("overwrite")
   .saveAsTable('EMP.bucketed_table1'))
hive> desc EMP.bucketed_table1;
OK
col                     array<string>           from deserializer

如何将数据记录保存并写入可稍后查看的配置单元表?

共有1个答案

甄坚白
2023-03-14

虽然Spark(至少在<=2.4版本中)不直接支持Hive的bucketing格式,但可以使用SparkSQL将数据加载到Hive中,从而使Spark输出Hive可读的bucketing数据;按照您的示例,它将如下所示:

//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")
 类似资料:
  • 我设置了一个AWS EMR集群,其中包括Spark 2.3.2、hive 2.3.3和hbase 1.4.7。如何配置Spark以访问hive表? 我采取了以下步骤,但结果是错误消息: Java语言lang.ClassNotFoundException:java。lang.NoClassDefFoundError:org/apache/tez/dag/api/SessionNotRunning使用

  • 当我在oozie中执行spark进程时,我有以下错误。找不到数据库。 这是我的火花配置

  • 我正在与AWS工作,我有使用Spark和Hive的工作流。我的数据是按日期分区的,所以每天我的S3存储中都有一个新分区。我的问题是,当有一天加载数据失败时,我不得不重新执行那个分区。接下来编写的代码是: 在我的流动中发生了什么?如果我使用savemode.overwrite,完整的表将被删除,并且只保存分区。如果我使用savemode.append,我可能会有重复的数据。 我想要的是:在表中,分区

  • 我正在尝试更新Dynamodb表用户中的一项。我尝试了许多不同的方法,但总是收到相同的错误消息: 提供的键元素与架构不匹配 项目的创建与查询一样有效,但更新不起作用。当我在DynamoDB上检查时,用户创建得很好: 下面是表格信息: 表名:用户 主分区键:电子邮件(字符串) 主排序键:注册(编号) 下面是代码(从lambda调用): 你知道我的代码中可能有什么错误吗?

  • 我在java中开发了一个工作正常的配置单元udf,我的函数返回输入与配置单元表中列之间的最佳匹配,因此它有以下简化的伪代码: 我的问题是,如果这个函数是由Hive调用的,为什么我需要在代码中连接到Hive?我可以使用使用我的功能的用户所连接的当前连接吗?

  • 我正在使用Spark SQL读取一个配置单元表,并将其分配给一个scala val 有什么方法可以绕过这个错误吗?我需要将记录插入到同一个表中。 嗨,我试着按建议做,但仍然得到同样的错误。