Apache spark spark能否在远程节点上执行表操作?(与行操作相比)

Apache spark spark能否在远程节点上执行表操作?(与行操作相比),apache-spark,apache-spark-mllib,Apache Spark,Apache Spark Mllib,spark的大多数数据集函数都是每行操作。然而,我想将ML任务的执行分配到Spark上运行——大多数ML任务自然是表的函数,而不是行的函数。(我已经研究过MLLib——它的方式太有限了,在很多情况下,spark通过在多个内核上分配操作使执行速度降低了几个数量级,而这些内核本来可以安装在单个内核上) ML算法处理行集合,而不是单行,这一点很重要,因此我希望将表具体化到节点上的内存中。(我小指保证它会适合核心)。我该怎么做 在功能上,我想做: def mlsubtask(table, arg2, a

spark的大多数数据集函数都是每行操作。然而,我想将ML任务的执行分配到Spark上运行——大多数ML任务自然是表的函数,而不是行的函数。(我已经研究过MLLib——它的方式太有限了,在很多情况下,spark通过在多个内核上分配操作使执行速度降低了几个数量级,而这些内核本来可以安装在单个内核上)

ML算法处理行集合,而不是单行,这一点很重要,因此我希望将表具体化到节点上的内存中。(我小指保证它会适合核心)。我该怎么做

在功能上,我想做:

def mlsubtask(table, arg2, arg3):
     data = table.collect()
     ...

sc = SparkContext(...)
sqlctx = SQLContext(sc)
...
df = sqlctx.sql("SELECT ...")
results = sc.parallelize([(df,arg2,arg3),(df,arg2,arg3),(df,arg2,arg3)]).map(mlsubtask).collect()
如果您可以这样执行:

sc = SparkContext(...)
sqlctx = SQLContext(sc)
...
df = sqlctx.sql("SELECT ...")
df = df.collect()
results = sc.parallelize([(df,arg2,arg3),(df,arg2,arg3),(df,arg2,arg3)]).map(mlsubtask).collect()
。。。但这会将数据带到客户端,然后客户端会重新序列化,效率很低。

对于单个任务:

def mlsubtask(iter_rows):
    data_table = list(iter_rows) # Or other way of bringing into memory.
   ...

df.repartition(1).mapPartitions(mlsubtask)