我在下面写了代码:
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
时是否存在任何问题?或者最好只创建1 SQLContext
然后将其作为arg传递?
答案 0 :(得分:1)
TL; DR 如果您想避免在使用SparkSession.builder.getOrCreate
周围传递上下文。除非您想要实现名称空间(函数,临时视图)的隔离,否则没有理由维护多个会话。
表现明智
每个上下文都是具有自己的目录和状态的重量级资源,因此您可能希望避免创建过多的实例。
明智的可用性:
此:
sqlContext = pyspark.sql.SQLContext(sc)
sqlContext.table("myTable")
通常不会工作,因为表只存在于特定目录的上下文中,而标准SQLContext
使用的是derby实例,无法共享。
如果符合以下条件,则可能会有效:
HiveContext
/ SparkSession
)。mytable
是一个表格或全局临时视图。API明智:
SQLContext
仅用于遗留原因,不应在新应用中使用。