Scala 如何将数据集转换为可缩放数据集?

Scala 如何将数据集转换为可缩放数据集?,scala,apache-spark-sql,Scala,Apache Spark Sql,有没有办法将org.apache.spark.sql.Dataset转换为scala.collection.Iterable?看起来这应该足够简单。您可以执行myDataset.collect或myDataset.collectAsList 但是,它将不再被分发。如果您希望能够在多台机器上分散计算,则需要使用一种分布式数据结构,如RDD、Dataframe或Dataset 如果只需要迭代驱动程序上的内容,也可以使用ToLocalitator,因为它的优点是一次只加载一个分区,而不是将整个数据集加

有没有办法将org.apache.spark.sql.Dataset转换为scala.collection.Iterable?看起来这应该足够简单。

您可以执行
myDataset.collect
myDataset.collectAsList

但是,它将不再被分发。如果您希望能够在多台机器上分散计算,则需要使用一种分布式数据结构,如RDD、Dataframe或Dataset


如果只需要迭代驱动程序上的内容,也可以使用
ToLocalitator
,因为它的优点是一次只加载一个分区,而不是将整个数据集加载到内存中<代码>迭代器不是一个
Iterable
(虽然它是一个
可传输的
),但根据您所做的,它可能是您想要的。

您可以尝试以下方法:

def toLocalIterable[T](dataset: Dataset[T]): Iterable[T] = new Iterable[T] {     
  def iterator = scala.collection.JavaConverters.asScalaIterator(dataset.toLocalIterator)
}

通过
JavaConverters.asscalaterator
进行转换是必要的,因为
Dataset
tolocaterator
方法返回
java.util.Iterator
而不是
scala.collection.Iterator
(这是
RDD
上的
tolocaterator
返回的。)我怀疑这是一个bug。

在Scala 2.11中,您可以执行以下操作:

import scala.collection.JavaConverters._

dataset.toLocalIterator.asScala.toIterable

是让事情变得懒惰,还是实现了完整的集合?