在一次执行中使用多个sqlContext

2024-03-29 12:44:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了下面的代码:

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有问题吗?或者最好只创建1SQLContext,然后将其作为arg传递?你知道吗


Tags: 代码importsqlreturndefmytabletablewhere
1条回答
网友
1楼 · 发布于 2024-03-29 12:44:18

TL;DR如果要避免传递上下文,请使用SparkSession.builder.getOrCreate。除非要实现名称空间(函数、临时视图)的隔离,否则没有理由维护多个会话)。你知道吗

性能方面

每个上下文都是一个具有自己的目录和状态的重量级资源,因此您可能希望避免创建过多的实例。你知道吗

可用性方面:

这是:

sqlContext = pyspark.sql.SQLContext(sc)
sqlContext.table("myTable")  

通常不会工作,因为表只存在于特定目录的上下文中,并且标准SQLContext使用不能共享的derby实例。你知道吗

如果满足以下条件,这可能会起作用:

  • 使用配置单元元存储(需要启用配置单元支持的HiveContext/SparkSession)。你知道吗
  • mytable是一个表或全局临时视图。你知道吗

API方面

SQLContext仅用于遗留原因,不应在新应用程序中使用。你知道吗

相关问题 更多 >