Pyspark 如何从映射函数(Python)执行spark sql查询?
如何从不是程序驱动程序部分的例程执行spark sql查询Pyspark 如何从映射函数(Python)执行spark sql查询?,pyspark,apache-spark-sql,parquet,Pyspark,Apache Spark Sql,Parquet,如何从不是程序驱动程序部分的例程执行spark sql查询 from pyspark import SparkContext from pyspark.sql import SQLContext from pyspark.sql.types import * def doWork(rec): data = SQLContext.sql("select * from zip_data where STATEFP ='{sfp}' and COUNTYFP = '{cfp}' ".for
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
def doWork(rec):
data = SQLContext.sql("select * from zip_data where STATEFP ='{sfp}' and COUNTYFP = '{cfp}' ".format(sfp=rec[0], cfp=rec[1]))
for item in data.collect():
print(item)
# do something
return (rec[0], rec[1])
if __name__ == "__main__":
sc = SparkContext(appName="Some app")
print("Starting some app")
SQLContext = SQLContext(sc)
parquetFile = SQLContext.read.parquet("/path/to/data/")
parquetFile.registerTempTable("zip_data")
df = SQLContext.sql("select distinct STATEFP,COUNTYFP from zip_data where STATEFP IN ('12') ")
rslts = df.map(doWork)
for rslt in rslts.collect():
print(rslt)
在本例中,我试图查询同一个表,但也想查询在Spark SQL中注册的其他表 不在分布式数据结构上执行嵌套操作。Spark不支持嵌套操作。您必须使用
连接
、本地(可选广播)数据结构或直接访问外部数据。如果无法使用连接完成任务,并且希望在内存中运行SQL查询,请执行以下操作:
可以考虑使用一些内存数据库,如<代码> H2、Apache DerBi<代码>和<代码> ReISIS < /代码>等,以执行并行更快的SQL查询,而不影响内存计算的好处。
与MySQL、PostgreSQL等数据库相比,内存数据库将提供更快的访问速度