对 SparkContext 导入语句感到困惑

时间:2021-04-23 20:39:24

标签: apache-spark

我正在尝试学习 Apache Spark,但无法解决这个问题:

import spark.SparkContext
import SparkContext._

为什么我们需要第二行看起来和第一行差不多? SparkContext 之后的 '._' 人是什么?

1 个答案:

答案 0 :(得分:1)

您不需要执行第二行 import SparkContext._ 。考虑到用于自包含 Spark 应用程序的旧方法,例如 Spark 1.6.x,https://github.com/mk6502/spark-1.6-scala-boilerplate/blob/master/src/main/scala/HelloSpark.scala 中的以下内容清楚而简要地说明了这一点:

import org.apache.spark.{SparkContext, SparkConf}

object HelloSpark {
  def main(args: Array[String]) {
    val sc = new SparkContext(new SparkConf().setAppName("hello spark").setMaster("local"))

    val rdd = sc.parallelize(Array(1, 2, 3, 4, 5))

    println("count: ")
    println(rdd.count())

    sc.stop()
  }
}

在笔记本中,设置和配置以及入口点是自动的。

如我的评论中所述,转到 Spark 2.x、3.x 并通过 https://data-flair.training/forums/topic/sparksession-vs-sparkcontext-in-apache-spark/

查看 SparkSession

在 1.6 Spark Guide on Self-Contained Applications 中,我们确实看到了第二行,但没有明确引用底层类。例如

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "YOUR_SPARK_HOME/README.md" // Should be some file on your system
    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
}