我写了下面的代码:
import pyspark
def getHub(sc, ClientId):
sqlContext = pyspark.sql.SQLContext(sc)
return sqlContext.table("myTable").where("ClientId = "+ClientId)
sc = pyspark.SparkContext()
df = getHub(sc, 1).union(getHub(sc, 2))
我知道我不能创建多个SparkContext
,但是创建多个SQLContext
有什么问题吗?还是只创建一个SQLContext
,然后作为一个arg传递给它更好呢?
发布于 2018-02-06 06:53:02
如果您想避免在周围传递上下文,请使用TL;博士使用SparkSession.builder.getOrCreate
。除非您希望实现名称空间(函数、临时视图)的隔离,否则没有理由维护多个会话)。
性能明智的
每个上下文都是一个具有自己的目录和状态的重量级资源,因此您可能希望避免创建过多的实例。
可用性方面的
这是:
sqlContext = pyspark.sql.SQLContext(sc)
sqlContext.table("myTable")
通常不能工作,因为表只存在于特定目录的上下文中,而标准SQLContext
使用的是不能共享的derby实例。
如果:
HiveContext
/ SparkSession
)。mytable
是一个表或全局临时视图。API智能
SQLContext
仅用于遗留原因,不应在新应用程序中使用。
https://stackoverflow.com/questions/48644689
复制