问题标签 [parquet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2684 浏览

hive - 如何在 hive 0.13+ 中为镶木地板数据指定模式

我有一个通过转换一些 avro 数据文件制作的镶木地板文件。该文件包含复杂的记录。我也有这些记录的 avro 模式以及等效的 parquet 模式(我在转换文件时得到了它)。我想制作一个由镶木地板文件支持的蜂巢表。

因为我的记录模式有很多字段,手动声明与这些字段对应的配置单元列非常困难且容易出错。这就是为什么我希望 hive 使用记录的 parquet 模式定义由我的 parquet 文件支持的表的列,这与 AvroSerDe 使用 avro 模式定义表列的方式大致相同。ParquetSerDe 支持吗?我怎样才能做到这一点?

PS 我知道可能的解决方法,我可以先使用 avro 模式定义一个 avro 支持的表,然后使用 CTAS 语句从中创建镶木地板表。但是,如果模式具有联合,则这不起作用,因为 AvroSerDe 使用 Hive 联合,而 Hive 实际上不支持 (!!) 并且 ParquetSerDe 不知道如何处理它们。

0 投票
0 回答
328 浏览

apache-spark-sql - 如何计算作业的文件读取时间?

我在 spark-shell 中运行一个 spark sql 作业,该作业从 parquet 文件创建一个表。

在驱动节点的 Web UI 上,一个任务有很多指标:

持续时间/调度程序延迟/任务反序列化时间/GC时间/结果序列化时间/获取结果时间/写入时间

我想知道从磁盘读取 parquet 块真正花费了多少时间(不包括反序列化、元组重建、随机写入等时间)。

我该如何计算呢?是

读取时间=持续时间-调度程序延迟-任务反序列化时间-GC时间-结果序列化时间-获取结果时间-写入时间?

谢谢,

0 投票
1 回答
4416 浏览

timestamp - Hive 的时间戳与 parquet 的时间戳相同吗?

关于逻辑类型和时间戳的镶木地板规范,似乎说 https://github.com/Parquet/parquet-format/blob/master/LogicalTypes.md “TIMESTAMP_MILLIS 用于组合逻辑日期和时间类型。它必须注释一个 int64 存储从 Unix 纪元开始的毫秒数,UTC 时间 1970 年 1 月 1 日 00:00:00.000。

"

即这里它说类型只精确到毫秒,它从 1970 年开始。

但是如果您查看https://github.com/apache/hive/blob/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert 中的 hive-parquet 代码 /ETypeConverter.java#L142 https://github.com/apache/hive/blob/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/timestamp/NanoTime.java# L54 似乎 hive 在镶木地板上的时间戳编码具有不同的规范,精确到纳秒,并且从“4713 年 1 月 1 日星期一”开始(在 jodd.datetime.JDateTime 中定义)

所以 Hive 的 parquet 时间戳存储与上述规范完全不同?

日期支持呢?https://issues.apache.org/jira/browse/HIVE-8119 我们是否将使用与上述文档中指定的“int32”不同的磁盘二进制编码?

谢谢

0 投票
1 回答
4894 浏览

hadoop - 是否可以直接从文件加载镶木地板?

如果我有一个二进制数据文件(可以转换为 csv 格式),有没有办法直接从它加载 parquet 表?许多教程显示将 csv 文件加载到文本表,然后从文本表加载到 parquet 表。从效率的角度来看,是否可以直接从我已经拥有的二进制文件中加载镶木地板表?理想情况下使用创建外部表命令。还是我需要先将其转换为 csv 文件?有文件格式限制吗?

0 投票
2 回答
34949 浏览

java - 如何在独立的 Java 代码中读取镶木地板文件?

cloudera 的 parquet 文档展示了与 pig/hive/impala 集成的示例。但在许多情况下,我想读取 parquet 文件本身以进行调试。

是否有一个简单的 java reader api 来读取 parquet 文件?

谢谢杨

0 投票
1 回答
8192 浏览

java - 将日期时间保存到 Spark 中的 Parquet

我想在编译时使用未知格式的数据创建 Parquet 文件。稍后我将模式作为文本获取,并且我知道某些列包含日期和时间。我想使用 Spark 和 Java 来做到这一点。所以我按照http://spark.apache.org/docs/1.2.1/sql-programming-guide.html#programmatically-specifying-the-schema并创建了具有适当类型的模式。我尝试使用 SparkDataType.TimestampTypeDataType.DateType类似日期的列。但他们都没有工作。当我尝试保存文件时,JavaSchemaRDD.saveAsParquetFile我收到错误Unsupported datatype+ 我尝试的日期类型。我试过这个,emptyRDD所以数据转换没有任何问题。

调查后:http: //parquet.incubator.apache.org/documentation/latest/https://github.com/Parquet/parquet-format/blob/master/LogicalTypes.md我认为我需要转换数据转换成一些整数/长类型,并告知它们代表日期的事实。如果是这样,我该如何在 Spark 中做到这一点?或者也许我需要做点别的?

0 投票
1 回答
618 浏览

hive - 将分区 parquet 文件读入 Spark 会导致字段顺序不正确

对于一张桌子

我们正在执行一个 hive sql,如下所示:

读回的值将“my_part_columns”显示为每行的第一个项目,而不是最后一个。

0 投票
1 回答
1536 浏览

hive - 无效的镶木地板配置单元架构:重复的组数组

目前,我们生产 Hadoop 集群上的大多数数据集都存储为 AVRO + SNAPPY 格式。我听说了很多关于 Parquet 的好消息,并想尝试一下。

我按照这个网页,更改了我们的一个 ETL 以生成 Parquet 文件,而不是 Avro,作为我们减速器的输出。我使用 Parquet + Avro 模式来生成最终输出数据,以及 snappy 编解码器。一切正常。所以最终输出的 parquet 文件应该与我们的原始 Avro 文件具有相同的架构。

现在,我尝试为这些 Parquet 文件创建一个 Hive 表。目前,我们使用的 IBM BigInsight 3.0 包含 Hive 12 和 Parquet 1.3.2。基于我们的 Avro 模式文件,我得出以下 Hive DDL:

该表在 Hive 12 中成功创建,我可以“desc table”没有任何问题。但是当我尝试查询表时,例如“select * from table limit 2”,我收到以下错误:

我注意到错误来自第一个嵌套的结构列数组。我的问题如下:

  1. Parquet 是否支持结构的嵌套数组?
  2. 这仅与 Parquet 1.3.2 有关吗?我对 Parquet 1.3.2 有什么解决方案吗?
  3. 如果我必须使用更高版本的 Parquet 来解决上述问题,并且如果 Parquet 1.3.2 在运行时可用,那会导致任何问题吗?
  4. 我可以从镶木地板数据中使用各种 Hive 功能,例如嵌套结构的“爆炸”吗?

我们正在寻找的是知道镶木地板是否可以像我们目前使用 AVRO 一样使用,但能给我们带来 AVRO 所缺少的柱状存储优势。

0 投票
4 回答
37221 浏览

apache-spark - 更新 apache parquet 文件中的值

我有一个相当大的镶木地板文件,我需要更改其中一列的值。一种方法是更新源文本文件中的这些值并重新创建镶木地板文件,但我想知道是否有更便宜且整体更简单的解决方案。

0 投票
2 回答
2056 浏览

java - 如何在关闭 ParquetWriter 对象并将其写入磁盘之前获取其内存大小?

我正在从流中读取 Avro 消息,并使用 parquet.hadoop.ParquetWriter 将它们写入 Parquet 文件。我正在尝试使输出文件的大小超过阈值限制。问题是 ParquetWriter 将所有内容保存在内存中,并且仅在编写器关闭时才将其写入磁盘。根据 Parquet 文档,数据以最终格式写入内存对象,这意味着内存中对象的大小与磁盘上的最终大小相同。我的问题是如何获取内存中写入数据的大小以决定关闭写入器?

我尝试使用写入 ParquetWriter 的 avro 消息的字节大小作为 Parquet writer 文件大小的估计值,但这与 parquet writer 大小有很大不同,因为 parquet 存储数据的方式不同(列格式)。这是我所做的伪代码:

事实证明,我从 getLength() 获得的值与 parquet 文件的实际文件大小有很大不同。我知道架构将被添加到文件的末尾,但这非常小。只是给你一个想法,当 getLength() 报告 130MB 时,实际文件大小只有 80MB。