对 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时,较小的文件将占用相同的空间)这可能不是每个人的优势,如果需要的话,我们很乐意有经验的人批评它。
在我们开始之前的一点是,我们正在寻找永久数据排序,因为我们将在接下来的数千个查询中使用它。几乎到目前为止,上面的描述已经确定了排序的一些挑战,但我将在下面描述所有挑战:
我想在Windows 10 UWP中使用更改内容进行用户控制.
我知道如何进行简单的用户控件,但我需要一个像这样的用户控件:
<Controls:UserControl x:Name="Usercontrol1" Margin="0,10,0,0" Grid.Row="1">
<Controls:UserControl.MainContent>
<Grid x:Name="Content">
//Items are here
</Grid>
</Controls:UserControl.MainContent>
</Controls:UserControl>
Run Code Online (Sandbox Code Playgroud)
我的用户控件中的Grid是空的,我想在每个页面中为此网格提供不同的项目.我想要一种方法在页面中为我的用户控件设置网格,然后将此网格添加到我的用户控件而不是那个空网格.
有没有办法做到这一点?
如何在 Java 中生成任意长度的任意随机数?比如,要生成一个宽度为3的数字,应该在100到999之间。那么如何编码呢?
在下图中:
我想解决第二个问题。
这是我写的第一个问题:
public int getRandomNumberReturntypediff(int min,int max) {
Random rand = new Random();
int n = rand.nextInt(1000) + 1;
Integer.toString(n);
System.out.println("get Random Number with return type STRING" + n);
return n;
}
Run Code Online (Sandbox Code Playgroud)
假设我带参数length
并返回String
。我怎样才能做到这一点?
我正在学习 C。我们使用scanf
和printf
作为输入和输出数据。
我们课程中有一个问题:反转浮点数。
我的编程能力很好,我可以轻松地做到这一点。
例如,我的想法之一是将一个float
数字转换为int
10 的幂,然后将其反转并float
再次转换。还有很多其他的想法。
但我们的问题有一个限度。使用scanf
功能来反转数字。
我请老师给我一个代码。他给出了下面的代码。抱歉,因为我不太清楚代码。此代码给出 12.33 的 12 和 33,但此代码不适用于 12.00001,因为我们得到 12 和 1。当我们得到这个数字时,我们将它们反转并打印出来。我的老师问我解决这个问题的方法,但我找不到方法。没有必要存在某种方式,但是可以帮助我吗?
我的老师代码:
int main(){
int a,b;
scanf("%d.%d", &a, &b);
printf("a = %d, b = %d", a, b);
}
Run Code Online (Sandbox Code Playgroud)
谢谢。