如何从不是程序驱动部分的例程执行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}' ".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中不受支持。您必须使用joins、本地(可选广播)数据结构或直接访问外部数据。

关于python - 如何从 map 函数(Python)执行Spark SQL查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35234465/

10-12 19:57