版本 spark2.0
疑问:
1.按照理解,sparksession.sql()是不会立即执行的,只有后面的collect等方法执行的时候才会触发,那为什么执行insert...select的时候不需要再执行acrion方法就可以生效
2.如何在遍历spark Streaming的过程中使用sparkSession
结论:
1.在SparkSession类里存在变量SparkContext,而一个spark任务只能有一个SparkContext且只能存在driver里,更改参数可以设置允许存在多个SparkContext但只能有一个是激活状态。因此,不能在foreachPartition这种需要在Executor里运行的方法里使用SparkSession操作数据库,sparSession本身可以序列化传过去,但在executor里sparSession的SparkContext为null,会报空指针异常。
2.spark每次获取kafka的数量可以通过配置参数“spark.streaming.kafka.maxRatePerPartition”设置(kafka的每个分区每秒获取数据的最大数量),间隔时间可以通过JavaStreamingContext初始化的时候设置,spark每次获取kafka的数量最大数量是 spark获取kafka间隔时间 x 参数“spark.streaming.kafka.maxRatePerPartition” x kafka分区数量