我正在尝试在 FreeBSD 机器上安装镶木地板工具。
我克隆了这个 repo: git clone https://github.com/apache/parquet-mr
然后我做了 cd parquet-mr/parquet-tools
然后我做了`mvn clean package -Plocal
如此处指定:https : //github.com/apache/parquet-mr/tree/master/parquet-tools
这是我得到的:
为什么这里出现这种依赖错误?我该如何解决?
对 parquet 文件进行排序有很多好处:
这样做可能还有其他好处。互联网上对此有很多讨论。正因为如此,这个问题的讨论并不是关于排序的原因。相反,这个问题的目的是谈论如何排序,这是在所有互联网链接中以最少解释(大约30%)提及的,而数据排序的挑战根本没有提及。这个问题的目的是希望得到该领域的专家和经验丰富的朋友的帮助,并确定最佳的排序方法(基于成本和收益)。
在开始讨论 Spark 之前,我将解释一下用于生成 parquet 文件的工具。当我们创建 parquet 文件时,该parquet-mr
库(例如我使用 Java,但它可能可以扩展到其他语言)会同时写入磁盘和内存。这个库还有一个功能叫做getDataSize()
在磁盘上完全关闭后返回文件的准确最终大小,因此我们在写入parquet文件时可以使用它来实现以下两个条件:
由于这个库同时写入磁盘和内存,所以它不允许数据排序,除非所有数据先在内存中排序,然后交给库。(但这对于大量数据来说是不可能的。)我们还隐含地假设数据是作为我们打算存储的流生成的。(在数据固定的情况下,本题所陈述的问题将毫无意义,因为可以说整个数据一劳永逸地排列好了,问题就结束了。但是我们假设数据是有流动的,在这种情况下,采用最佳方式对数据进行排序非常重要)
上面提到的 Apache parquet 库的优点之一是我们可以确定输出 parquet 文件的确切大小。我认为这是一个优点。因为,例如,如果我知道 Hadoop 块的大小等于 128 MB,而 parquet 行组的大小为 128 MB,我可以将 parquet 文件大小固定为 1 GB。然后我知道所有镶木地板文件将有 8 个块,并且 HDFS 存储将得到最好的利用,并且所有镶木地板文件将相同。(因为在HDFS中,当块大小为128 MB时,较小的文件将占用相同的空间)这可能不是每个人的优势,如果需要的话,我们很乐意有经验的人批评它。
在我们开始之前的一点是,我们正在寻找永久数据排序,因为我们将在接下来的数千个查询中使用它。几乎到目前为止,上面的描述已经确定了排序的一些挑战,但我将在下面描述所有挑战:
我一直在寻找在 Java 中进行转换的方法,arrow
反之亦然parquet
。
尽管 Python 库arrow
完全支持上述转换,但我在 Java 中几乎找不到任何相同的文档。
arrow/parquet
有人在Java 库中遇到过这样的功能吗?
parquet ×3
parquet-mr ×3
java ×2
apache-arrow ×1
apache-spark ×1
freebsd ×1
maven ×1
sorting ×1