我试图在对数据的某一列执行聚合操作之前对数据进行预分区。我有3个工作节点,我希望每个分区在我分区的列中都有不重叠的值。我不希望出现两个分区在列中可能具有相同值的情况。
例如。如果我有以下数据
ss_item_sk | ss_quantity
1 | 10.0
1 | 4.0
2 | 3.0
3 | 5.0
4 | 8.0
5 | 13.0
5 | 10.0
那么以下隔墙是令人满意的:
分区1
ss_item_sk | ss_quantity
1 | 10.0
1 | 4.0
分区2
ss_item_sk | ss_quantity
2 | 3.0
3 | 5.0
分区3
ss_item_sk | ss_quantity
4 | 8.0
5 | 13.0
5 | 10.0
不幸的是,我下面的代码不起作用。
spark.sqlContext.setConf( "spark.sql.shuffle.partitions", "3")
var json = spark.read.json("hdfs://master:9000/tpcds/store_sales")
var filtered = json.filter(row => row.getAs[Long]("ss_item_sk") < 180)
filtered.repartition($"ss_item_sk").write.json(savepath)
我已经看过了
我还是想不通。
按键重新分区根据数据帧级别的键进行数据分布。而在hdfs上编写数据帧是一件独立的事情
df.coalesce(1).write.partitionBy("ss_item_sk").json(savepath)
在这个场景中,您也将看到分区列创建的不同目录中的多个零件文件。只能根据“partitionBy”方法控制将运行的写入程序/还原程序的数量。它与Map Reduce Partitioner非常相似,因为它控制着要运行的reducer的数量。要基于分区列获取单个文件,必须运行以下命令。
df.repartition($"ss_item_sk").write.partitionBy("ss_item_sk").json(savepath)
现在,当减速器被映射到执行器分区的数量时,这就起作用了。希望这能有所帮助
我需要从一个Hive表中读取数据并将其插入到另一个Hive表中。两个表的架构是相同的。该表按日期分区 步骤1:从Spark的源表中读取数据。 第 2 步:按列(国家、日期)和分区数重新分区为 4。 我只得到每个国家代码1个分区
我需要spark(scala)数据帧分区方面的帮助。我需要按一个键列划分成n个分区,与同一个键相关的所有行都应该在同一个分区中(即,键不应该分布在整个分区中) 注意:我的钥匙可能有几百万 例如:假设我有下面的数据框 等等等等 正如您所看到的,许多值共享相同的键。我想将此数据集划分为"n"个分区,其中相同的键应该在相同的分区中,并且键不应该分布在分区之间。多个键驾驶室位于同一分区,键不可排序。 提前
我试图优化两个spark dataframes之间的联接查询,让我们将它们称为df1、df2(在公共列“saleid”上联接)。df1非常小(5M),所以我在spark集群的节点中广播它。df2非常大(200米行),所以我尝试通过“saleid”对它进行桶/重新分区。 例如: 分区: 水桶: 我不知道哪一个是正确的技术使用。谢谢。
整数n的划分是将n写成正整数和的一种方式。对于 例如,对于n=7,一个分区是1 1 5。我需要一个程序来查找所有 使用“r”整数对整数“n”进行分区。例如,
根据Spark 1.6.3的文档,应该保留结果数据表中的分区数: 返回由给定分区表达式分区的新DataFrame,保留现有的分区数 Edit:这个问题并不涉及在Apache Spark中删除空DataFrame分区的问题(例如,如何在不产生空分区的情况下沿列重新分区),而是为什么文档所说的内容与我在示例中观察到的内容不同
我有一个具有如下模式的dataframe: