使用 SparkSession 创建广播变量?火花2.0
Creating a broadcast variable with SparkSession ? Spark 2.0
是否可以使用 SparkSession 提供的 sparkContext 创建广播变量?我在 sc.broadcast 下不断收到错误,但是在另一个项目中使用 org.apache.spark.SparkContext 中的 SparkContext 时我没有问题。
import org.apache.spark.sql.SparkSession
object MyApp {
def main(args: Array[String]){
val spark = SparkSession.builder()
.appName("My App")
.master("local[*]")
.getOrCreate()
val sc = spark.sparkContext
.setLogLevel("ERROR")
val path = "C:\Boxes\github-archive\2015-03-01-0.json"
val ghLog = spark.read.json(path)
val pushes = ghLog.filter("type = 'PushEvent'")
pushes.printSchema()
println("All events: "+ ghLog.count)
println("Only pushes: "+pushes.count)
pushes.show(5)
val grouped = pushes.groupBy("actor.login").count()
grouped.show(5)
val ordered = grouped.orderBy(grouped("count").desc)
ordered.show(5)
import scala.io.Source.fromFile
val fileName= "ghEmployees.txt"
val employees = Set() ++ (
for {
line <- fromFile(fileName).getLines()
} yield line.trim
)
val bcEmployees = sc.broadcast(employees)
}
}
或者是使用Set()而不是Seq对象的问题?
感谢您的帮助
编辑:
我在 intellij 中不断收到 "cannot resolve symbol broadcast" 错误消息
在遵守之后我得到了一个错误:
Error:(47, 28) 值广播不是 Unit 的成员
val bcEmployees = sc.broadcast(员工)
^
您的 sc
变量的类型为 Unit
,因为根据 docs,setLogLevel
的类型为 return Unit
。改为这样做:
val sc: SparkContext = spark.sparkContext
sc.setLogLevel("ERROR")
跟踪变量的类型以便及早发现错误很重要。
是否可以使用 SparkSession 提供的 sparkContext 创建广播变量?我在 sc.broadcast 下不断收到错误,但是在另一个项目中使用 org.apache.spark.SparkContext 中的 SparkContext 时我没有问题。
import org.apache.spark.sql.SparkSession
object MyApp {
def main(args: Array[String]){
val spark = SparkSession.builder()
.appName("My App")
.master("local[*]")
.getOrCreate()
val sc = spark.sparkContext
.setLogLevel("ERROR")
val path = "C:\Boxes\github-archive\2015-03-01-0.json"
val ghLog = spark.read.json(path)
val pushes = ghLog.filter("type = 'PushEvent'")
pushes.printSchema()
println("All events: "+ ghLog.count)
println("Only pushes: "+pushes.count)
pushes.show(5)
val grouped = pushes.groupBy("actor.login").count()
grouped.show(5)
val ordered = grouped.orderBy(grouped("count").desc)
ordered.show(5)
import scala.io.Source.fromFile
val fileName= "ghEmployees.txt"
val employees = Set() ++ (
for {
line <- fromFile(fileName).getLines()
} yield line.trim
)
val bcEmployees = sc.broadcast(employees)
}
}
或者是使用Set()而不是Seq对象的问题?
感谢您的帮助
编辑:
我在 intellij 中不断收到 "cannot resolve symbol broadcast" 错误消息
在遵守之后我得到了一个错误: Error:(47, 28) 值广播不是 Unit 的成员 val bcEmployees = sc.broadcast(员工) ^
您的 sc
变量的类型为 Unit
,因为根据 docs,setLogLevel
的类型为 return Unit
。改为这样做:
val sc: SparkContext = spark.sparkContext
sc.setLogLevel("ERROR")
跟踪变量的类型以便及早发现错误很重要。