Scala 如何在SparkListener中使用数据帧?
我已经编写了一个CustomListener(源自SparkListener等),它工作得很好,我可以截取度量。 问题是如何在侦听器本身中使用数据帧,因为这假设使用相同的Spark上下文,但是在2.1.x中,每个JVM只有1个上下文 假设我想用json向磁盘写入一些指标。不可能在ApplicationEnd中执行此操作,只能在最后一个jobEnd中执行(如果有多个作业,则在最后一个作业中执行)Scala 如何在SparkListener中使用数据帧?,scala,apache-spark,Scala,Apache Spark,我已经编写了一个CustomListener(源自SparkListener等),它工作得很好,我可以截取度量。 问题是如何在侦听器本身中使用数据帧,因为这假设使用相同的Spark上下文,但是在2.1.x中,每个JVM只有1个上下文 假设我想用json向磁盘写入一些指标。不可能在ApplicationEnd中执行此操作,只能在最后一个jobEnd中执行(如果有多个作业,则在最后一个作业中执行) 这可能/可行吗 我试图测量作业/阶段/任务的性能,记录这些性能,然后以编程方式进行分析。也许这不是最好
SparkListener应该尽可能快,因为速度慢的SparkListener会阻止其他人接收事件。您可以使用单独的线程来释放主事件调度程序线程,但仍然受到每个JVM只有一个SparkContext的限制 但是,这一限制很容易克服,因为您可以使用请求当前SparkContext 不过,我不推荐这种架构。这给驱动程序的JVM带来了太大的压力,而JVM应该“关注”应用程序处理(而不是收集可能已经用于web UI和/或Spark History Server的事件) 我宁愿使用Kafka或Cassandra或其他持久性存储来存储事件,并让其他处理应用程序使用它们(就像works一样)