我正在尝试学习 Apache Spark,但无法解决这个问题:
import spark.SparkContext
import SparkContext._
为什么我们需要第二行看起来和第一行差不多? SparkContext 之后的 '._' 人是什么?
答案 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))
}
}