Python 提高sparksql的并行性
我有下面的代码。我将pyspark 1.2.1与Python2.7(cpython)结合使用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上下文对象的后续调用失败 这在并发
这段代码的问题是,它一次只对一列进行操作。我的集群中有足够多的节点,可以同时对多个列进行操作在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])