Apache spark 如何在ApacheSpark中执行动态重新分配?

Apache spark 如何在ApacheSpark中执行动态重新分配?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,让我们假设这样一种情况:我们必须在过滤后重新划分数据集,或者实现并行度 如何执行动态重新分区,而不是手动调整分区数 注意:RDD、数据帧和数据集的解决方案 可以使用重新分区(colname)或partitionBy()对数据集进行动态分区 例如,如果您的数据集如下所示 create table sensor_data ( sensor_id bigint, temp float, region_id string, state string, country st

让我们假设这样一种情况:我们必须在过滤后重新划分数据集,或者实现并行度

如何执行动态重新分区,而不是手动调整分区数

注意:RDD、数据帧和数据集的解决方案

可以使用重新分区(colname)或partitionBy()对数据集进行动态分区

例如,如果您的数据集如下所示

 create table sensor_data (
  sensor_id bigint,
  temp  float,
  region_id  string,
  state  string,
  country   string
 ) partition by ( day string)
如果你想对某一天进行区域计算

val sensor_data = spark.sql("select * from sensor_data where day='2018-02-10')
val results = sensor_data.
     repartition(col("region_id")).
     mapPartitions( eventIter =>  {
       processEvent(eventIter).iterator
  })

 case Event(sensor_id: String, country: String, max_temp: float)


 def processEvent(evtIter: Iterator[Row]) : List[Event] = {
    val maxTempEvents =  ListBuffer[Event]()
    while (evtIter.hasNext) {
       val evt = evtIter.next()
       // do your calculation and add results to maxTempEvents list
    }
   maxTempEvents
 }
希望这有帮助

谢谢
拉维

如果你能举个例子就好了。非常感谢,如果你能回答下面的问题就太有帮助了-