我想通过并行而不是顺序地运行Spark框架和python,在一个表上运行许多查询
当我使用for循环运行查询时,它的执行速度非常慢,因为(我相信)它无法并行中断作业。例如:
for fieldName in fieldList:
result = spark.sql("select cast({0} as string) as value,
count({0}) as FREQ
from {1} group by {0} order by FREQ desc limit 5".format(fieldName, tableName))
我尝试使用一个名为“queryStr”的列创建一个数据帧来保存查询,然后使用一个命令创建一个“RESULTS”列来保存结果:
inputDF = inputDF.withColumn('RESULTS', queryUDF(inputDF.queryStr))
自定义项如下:
resultSchema = ArrayType(StructType([
StructField('VALUE', StringType(), True),
StructField('FREQ',IntegerType(), True)
]), True)
queryUDF = udf(lambda queryStr: spark.sql(queryStr).collect(), resultSchema
我使用的是spark版本2.4.0
我的错误是:
PicklingError: Could not serialize object: TypeError: 'JavaPackage' object is not callable
那么,如何并行运行这些查询呢?或者,有没有更好的方法来迭代大量的查询
类似于:Trying to execute a spark sql query from a UDF
简而言之,不能在自定义项中执行SQL查询
相关问题 更多 >
编程相关推荐