partitionBy()是SparkRDD的一个方法,用于对RDD进行重新分区。其主要作用是将RDD中的数据按照指定的分区方式进行重新分区,并返回一个新的分区后的RDD。在Spark中,默认情况下使用哈希分区(HashPartitioning)对RDD进行分区。但有时候我们需要自定义分区方式来更好地满足业务需求。这时候,我们可以使用partitionBy()方法来进行自定义分区。partitionBy()方法的第一个参数是分区数,第二个参数是一个函数,用于指定分区的key。如果没有第二个参数,则使用默认的哈希分区方式。他和groupBy()的区别partitionBy()和groupBy()
假设我有一个包含大约21亿条记录的数据集。这是一个包含客户信息的数据集,我想知道他们做了多少次。所以我应该对ID进行分组并对一列求和(它有0和1值,其中1表示一个Action)。现在,我可以使用一个简单的groupBy和agg(sum)它,但据我所知,这并不是很有效。groupBy将在分区之间移动大量数据。或者,我也可以使用带有partitionBy子句的Window函数,然后对数据求和。缺点之一是我必须应用额外的过滤器,因为它会保留所有数据。我想要每个ID一条记录。但是我看不到这个窗口是如何处理数据的。是不是比这个groupBy和sum.还是一样? 最佳答
我以一种方式对数据进行了分区,我只想以另一种方式对其进行分区。所以它基本上是这样的:sqlContext.read().parquet("...").write().partitionBy("...").parquet("...")我想知道这是否会触发随机播放或所有数据都将在本地重新分区,因为在这种情况下,分区意味着只是HDFS中的一个目录,来自同一分区的数据不必位于同一节点上写在HDFS的同一个目录中。 最佳答案 parititionBy和bucketBy都不会打乱数据。但在某些情况下,首先重新分区数据可能是个好主意:df.rep
我了解partitionBy函数对我的数据进行分区。如果我使用rdd.partitionBy(100),它会将我的数据按键分成100个部分。即与相似键关联的数据将被分组在一起我的理解正确吗?分区数等于分区数是否可取可用内核?这会使处理更有效率吗?如果我的数据不是键值格式怎么办。我还能使用这个功能吗?假设我的数据是serial_number_of_student,student_name。在这个情况下我可以按student_name而不是序列号? 最佳答案 不完全是。Spark,包括PySpark,isbydefaultusingha
我已经在Spark中使用Window成功创建了一个row_number()partitionBy,但我想按降序而不是默认的升序对其进行排序。这是我的工作代码:frompysparkimportHiveContextfrompyspark.sql.typesimport*frompyspark.sqlimportRow,functionsasFfrompyspark.sql.windowimportWindowdata_cooccur.select("driver","also_item","unit_count",F.rowNumber().over(Window.partitionB