0

我使用 ADF 以 Parquet Snappy 格式将数据从 SQL 服务器摄取到 ADLS GEN2,但是接收器中的文件大小高达 120 GB,当我在 Spark 中读取此文件并加入时,该大小给我带来了很多问题此文件中的数据与许多其他 Parquet 文件。

我正在考虑使用指向 ADLS 位置的 Delta Lake 的 unManaged 表,如果我不使用它指定任何分区,我可以创建一个 UnManaged 表

转换为 DELTA 镶木地板。PATH TO FOLDER CONTAINING A PARQUET FILE(S)

但是如果我想对这个文件进行分区以进行查询优化

“ CONVERT TO DELTA parquet. PATH TO FOLDER CONTAINING A PARQUET FILE(S), PARTITIONED_COLUMN DATATYPE”

它给了我屏幕截图中提到的错误(查找附件)。

文本错误:- org.apache.spark.sql.AnalysisException:期望 1 个分区列:[ <PARTITIONED_COLUMN>],但从解析文件名中找到 0 个分区列:[]:abfss://mydirectory@myADLS .dfs.core.windows.net/level1/Level2/Table1.parquet.snappy;

我无法使用带有分区详细信息的 ADF 创建这个 Parquet 文件(我愿意接受建议)

我是否给出了错误的语法,或者这甚至可以完成?

4

1 回答 1

0

好的,我找到了这个问题的答案。当您使用上述方法将 parquet 文件转换为 delta 时,Delta 会查找正确的目录结构,其中包含分区信息以及“Partitioned By”子句中提到的列的名称。

例如,我有一个名为 /Parent 的文件夹,在其中我有一个包含分区信息的目录结构,分区的镶木地板文件在分区文件夹内保持一层,文件夹名称是这样的

/父/子文件夹=0/part-00000-62ef2efd-b88b-4dd1-ba1e-3a146e986212.c000.snappy.parquet /父/子文件夹=1/part-00000-fsgvfabv-b88b-4dd1-ba1e-3a146e986212.c000.snappy .parquet /父/子文件夹=2/part-00000-fbfdfbfe-b88b-4dd1-ba1e-3a146e986212.c000.snappy.parquet /父/子文件夹=3/part-00000-gbgdbdtb-b88b-4dd1-ba1e-3a146e986212.c000 .snappy.parquet

在这种情况下,子文件夹是在父目录中创建的分区。

转换为 DELTA 镶木地板。/Parent/按(子文件夹 INT)分区

将仅采用此目录结构并将整个分区数据转换为增量,并将分区信息存储在 Metastore 中。

摘要:- 此命令仅用于利用已创建的分区 Parquet 文件。要在单个 Parquet 文件上创建分区,您必须采取不同的路线,如果您有兴趣,我可以稍后向您解释;)

于 2020-01-17T09:47:17.530 回答