我有一个复杂的/嵌套的配置单元外部表,它是在HDFS顶部创建的(文件是avro格式的)。当我运行配置单元查询时,它会显示所有记录和分区。
然而,当我在Spark中使用相同的表时:
val df = spark
.read
.format("avro")
.load("avro_files")
.option("avroSchema", Schema.toString)
请注意,当我查看数据时,分区列不是底层保存数据的一部分,但当我通过hive查询表时,我可以看到它。当我尝试使用PySpark加载avro文件时,我也可以看到分区列:
df = ( sqlContext.read.format("com.databricks.spark.avro").option("avroSchema", pegIndivSchema).load('avro_files'))
所以我想知道那是什么样子?
请检查选项架构部分中使用的schema.tostring
值中的列。它将丢失分区列。还要尝试使用在pyspark代码中使用的相同模式。
option("avroSchema", pegIndivSchema)
我有一个简单的配置单元-外部表,它是在S3的顶部创建的(文件是CSV格式的)。当我运行配置单元查询时,它会显示所有记录和分区。 但是,当我在Spark中使用相同的表时(Spark SQL在分区列上有where条件),它并没有显示应用了分区筛选器。然而,对于配置单元托管表,Spark能够使用分区信息并应用分区筛选器。 是否有任何标志或设置可以帮助我利用Spark中Hive外部表的分区?谢了。
当使用外部配置单元表时,是否有一种方法可以删除目录中的数据,但通过查询保留分区。请注意,我不想删除表并重新创建它。我只想清空底层文件夹并重新启动一个进程。我的表很大,按年、月、日期和小时划分分区,手动重新创建分区需要大量时间。 谢谢
我有一个外部分区配置单元表,下面的文件行格式分隔字段以“通过配置单元直接读取数据就可以了,但是当使用Spark的Dataframe API时,分隔符”没有被考虑在内。 创建外部分区表: dataframe.show()输出:
我正在与AWS工作,我有使用Spark和Hive的工作流。我的数据是按日期分区的,所以每天我的S3存储中都有一个新分区。我的问题是,当有一天加载数据失败时,我不得不重新执行那个分区。接下来编写的代码是: 在我的流动中发生了什么?如果我使用savemode.overwrite,完整的表将被删除,并且只保存分区。如果我使用savemode.append,我可能会有重复的数据。 我想要的是:在表中,分区
1-创建了源表 2-将数据从本地加载到源表 3-创建了另一个带有分区的表-partition_table 我不确定如何在外部表中进行分区。有人能帮我一步一步地描述一下吗?。
我有一个配置单元外部表,有3个分区列(a,B,C),现在我想从分区中删除B和C列。这样做可能吗?我已经尝试使用Alter table tab_name drop column col_name;---但它会抛出一个错误,说明无法删除分区列。