Scala 分区如何在Spark流中工作?

Scala 分区如何在Spark流中工作?,scala,apache-spark,spark-streaming,rdd,spark-streaming-kafka,Scala,Apache Spark,Spark Streaming,Rdd,Spark Streaming Kafka,我正在研究spark流媒体应用程序的性能改进 分区在流媒体环境中的工作方式。与将文件加载到spark中或始终只创建一个分区相同,使其仅在executor的一个核心中工作?在spark流式处理(非结构化)中,分区的工作方式与使用RDDs时的工作方式完全相同。您可以使用 rdd.getNumPartitions 正如您还标记了spark streaming kafka一样,值得一提的是,输入数据流中的分区数将与您正在使用的kafka主题中的分区数相匹配 一般来说,对于RDD,有和可用于重新分区的策

我正在研究spark流媒体应用程序的性能改进

分区在流媒体环境中的工作方式。与将文件加载到spark中或始终只创建一个分区相同,使其仅在executor的一个核心中工作?

在spark流式处理(非结构化)中,分区的工作方式与使用
RDD
s时的工作方式完全相同。您可以使用

rdd.getNumPartitions
正如您还标记了spark streaming kafka一样,值得一提的是,输入数据流中的分区数将与您正在使用的kafka主题中的分区数相匹配

一般来说,对于RDD,有和可用于重新分区的策略。您可以通过以下方式使用
HashPartitioner

rdd.partitionBy(新的HashPartitioner(2))
其中,
rdd
是一个键值配对rdd,
2
是分区数

与结构化API相比,RDD在应用自定义分区方面也具有优势。为此,您可以扩展
Partitioner
类,并覆盖方法
numPartitions
getPartitions
,如下例所示:

import org.apache.spark.Partitioner
类TablePartitioner扩展了Partitioner{
覆盖def numPartitions:Int=2
覆盖def getPartition(键:Any):Int={
val tableName=key.asInstanceOf[String]
如果(tableName==“foo”)0//分区计数从0开始
其他1
}
}