Pau*_*ers 2 scala apache-spark-sql
有没有一种方法可以将org.apache.spark.sql.Dataset转换为scala.collection.Iterable?看来这应该足够简单。
您可以执行myDataset.collect或myDataset.collectAsList。
但是,它将不再分发。如果希望能够在多台计算机上分散计算,则需要使用分布式数据结构之一,例如RDD,Dataframe或Dataset。
toLocalIterator如果只需要迭代驱动程序上的内容,也可以使用它,因为它的优点是一次仅将一个分区而不是整个数据集加载到内存中。Iterator不是Iterable(尽管它是一个Traverable),但是取决于您正在执行的操作,可能是您想要的。
您可以尝试这样的事情:
def toLocalIterable[T](dataset: Dataset[T]): Iterable[T] = new Iterable[T] {
def iterator = scala.collection.JavaConverters.asScalaIterator(dataset.toLocalIterator)
}
Run Code Online (Sandbox Code Playgroud)
通过转换JavaConverters.asScalaIterator是必要的,因为返回的toLocalIterator方法不是a (这是on的返回。),我怀疑这是一个错误。Datasetjava.util.Iteratorscala.collection.IteratortoLocalIteratorRDD