为什么我们不能使用Spark会话创建RDD

时间:2017-02-17 10:58:26

标签: apache-spark rdd

我们看到了,

Spark context available as 'sc'.
Spark session available as 'spark'.

我读过spark会话包括spark上下文,流上下文,hive上下文...如果是这样,那么为什么我们不能通过使用spark会话而不是spark上下文来创建rdd。

scala> val a = sc.textFile("Sample.txt")
17/02/17 16:16:14 WARN util.SizeEstimator: Failed to check whether UseCompressedOops is set; assuming yes
a: org.apache.spark.rdd.RDD[String] = Sample.txt MapPartitionsRDD[1] at textFile at <console>:24

scala> val a = spark.textFile("Sample.txt")
<console>:23: error: value textFile is not a member of org.apache.spark.sql.SparkSession
       val a = spark.textFile("Sample.txt")

如上所示,sc.textFile成功创建了RDD,但没有创建spark.textFile

3 个答案:

答案 0 :(得分:8)

在Spark 2+中,Spark Context可通过Spark Session获得,因此您需要做的就是:

spark.sparkContext().textFile(yourFileOrURL)

请参阅此访问方法here的文档。

请注意,在PySpark中,这将成为:

spark.sparkContext.textFile(yourFileOrURL)

请参阅文档here

答案 1 :(得分:4)

在早期版本的spark中, spark context 是Spark的切入点。由于RDD是主要的API,它是使用上下文API创建和操作的。

对于其他每个API,我们都需要使用不同的上下文。对于流式传输,我们需要StreamingContext,SQL sqlContext和hive HiveContext

但随着DataSet and Dataframe API’s成为新的标准API,Spark需要为它们构建入口点。因此在Spark 2.0中,Spark为DataSet and Dataframe API’s提供了一个新的入口点,称为 Spark Session

SparkSession基本上是SQLContext, HiveContext and future StreamingContext的组合。

这些上下文中提供的所有API也可以在spark会话中使用。 Spark会话内部有一个用于实际计算的 spark上下文

  

sparkContext仍然包含它之前的方法   版本。

     

可以找到sparkSession的方法here

答案 2 :(得分:1)

可以通过以下方式创建 -

val a = spark.read.text(&#34; wc.txt&#34;) 这将创建一个数据帧,如果要将其转换为RDD,则使用 - a.rdd请参考以下链接,关于数据集API- http://cdn2.hubspot.net/hubfs/438089/notebooks/spark2.0/Dataset.html