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

来自spark分区拼花文件的Impala表

薛望
2023-03-14

我已经使用Spark生成了一些分区拼花地板数据,我想知道如何将其映射到Impala表。。。遗憾的是,我还没有找到任何解决办法。

拼花地板的架构如下:

{ key: long,
value: string,
date: long }

我用keydate对其进行了分区,这为我的hdfs提供了这种目录:

/data/key=1/date=20170101/files.parquet
/data/key=1/date=20170102/files.parquet
/data/key=2/date=20170101/files.parquet
/data/key=2/date=20170102/files.parquet
...

您知道我如何告诉Impala从这个数据集创建一个具有相应分区的表(并且不必像我读到的那样在每个分区上循环)?有可能吗?

提前谢谢你

共有1个答案

柯昆
2023-03-14

假设parquet的模式是指数据集的模式,然后使用列进行分区,那么在实际的文件中只有键列。拼花地板文件。现在,您可以按以下步骤进行操作

解决方案是使用黑斑羚外部表。

create external table mytable (key BIGINT) partitioned by (value String ,
date BIGINT) stored as parquet location '....../data/'

注意,在上面的语句中,必须给出数据文件夹的路径

alter table mytable recover partitions'

refresh mytable;

以上两个命令将根据表的模式自动检测分区,并了解子目录中存在的拼花文件。

现在,您可以开始查询数据了。

希望有帮助

 类似资料:
  • 我试图利用火花分区。我试图做这样的事情 这里的问题每个分区都会创建大量的镶木地板文件,如果我尝试从根目录读取,则会导致读取缓慢。 为了避免这种情况,我试过 但是,这将创建每个分区中镶木地板文件的数目。现在我的分区大小不同了。因此,理想情况下,我希望每个分区都有单独的合并。然而,这看起来并不容易。我需要访问所有分区合并到一定数量并存储在单独的位置。 我应该如何使用分区来避免写入后出现许多文件?

  • 如何读取带有条件作为数据帧的分区镶木地板, 这工作得很好, 分区存在的时间为< code>day=1到day=30是否可能读取类似于< code>(day = 5到6)或< code>day=5,day=6的内容, 如果我输入< code>*,它会给出所有30天的数据,而且太大了。

  • 使用Python 3.6在Amazon EMR集群(1个主节点,2个节点)上运行Spark 2.4.2 我正在Amazon s3中读取对象,将其压缩为拼花格式,并将其添加(附加)到现有的拼花数据存储中。当我在pyspark shell中运行代码时,我能够读取/压缩对象,并将新的拼花文件添加到现有的拼花文件中,当我对拼花数据运行查询时,它显示所有数据都在拼花文件夹中。但是,当我在EMR集群上的步骤中

  • 我们需要每天将文本数据转换为拼花地板/avro,如果输入来自多个具有不同结构的源,我们希望使用基于spark sql的scala代码来实现这一点,而不考虑分隔符和列数或结构。

  • 我遇到了一个问题,无法在Hive中读取由Spark生成的分区拼花文件。我可以在hive中创建外部表,但是当我尝试选择几行时,hive只返回一个“OK”消息,没有行。 我能够在Spark中正确读取分区的拼花文件,所以我假设它们是正确生成的。当我在hive中创建外部表而不进行分区时,我也能够读取这些文件。 null 我的Spark配置文件有以下参数(/etc/Spark/conf.dist/spark

  • 我有一个拼花格式的大数据集(大小约1TB),分为2个层次: