Python 提高sparksql的并行性

Python 提高sparksql的并行性,python,concurrency,apache-spark,apache-spark-sql,pyspark,Python,Concurrency,Apache Spark,Apache Spark Sql,Pyspark,我有下面的代码。我将pyspark 1.2.1与Python2.7(cpython)结合使用 这段代码的问题是,它一次只对一列进行操作。我的集群中有足够多的节点,可以同时对多个列进行操作在spark中有什么方法可以做到这一点吗?如果我使用线程或类似的东西怎么办?我可以用这种方法并行启动多个寄存器Emptable(以及相关的收集操作)吗?不幸的是,下面的方法不能很好地工作。它的工作原理是执行所有单独的迭代。不幸的是,由于nullpointer异常,对hive\u上下文对象的后续调用失败 这在并发

我有下面的代码。我将pyspark 1.2.1与Python2.7(cpython)结合使用


这段代码的问题是,它一次只对一列进行操作。我的集群中有足够多的节点,可以同时对多个列进行操作在spark中有什么方法可以做到这一点吗?如果我使用线程或类似的东西怎么办?我可以用这种方法并行启动多个
寄存器Emptable
(以及相关的收集操作)吗?

不幸的是,下面的方法不能很好地工作。它的工作原理是执行所有单独的迭代。不幸的是,由于nullpointer异常,对
hive\u上下文
对象的后续调用失败


这在并发的情况下是可能的。期货:

from concurrent import futures

def make_col_temptable(colname):
    colrdd = hive_context.sql('select %s from %s' % (colname, temp_table))
    # zip_with_random_index is expensive
    colwidx = zip_with_random_index(colrdd).map(merge_index_on_row)
    (hive_context.applySchema(colwidx, a_schema)
        .registerTempTable(a_name))

with futures.ThreadPoolExecutor(max_workers=20) as executor:
    futures.wait([executor.submit(make_col_temptable, colname) for colname in shuffle_columns])

我有一个类似的问题(尽管是Scala)。您可以从
shuffle\u列中创建RDD,并使用
.foreach
,这样spark将处理并行性。@markiz是这样吗?循环的主体包括对HiveContext和其他RDD的调用;这些东西不能分发。
from concurrent import futures

def make_col_temptable(colname):
    colrdd = hive_context.sql('select %s from %s' % (colname, temp_table))
    # zip_with_random_index is expensive
    colwidx = zip_with_random_index(colrdd).map(merge_index_on_row)
    (hive_context.applySchema(colwidx, a_schema)
        .registerTempTable(a_name))

with futures.ThreadPoolExecutor(max_workers=20) as executor:
    futures.wait([executor.submit(make_col_temptable, colname) for colname in shuffle_columns])