如何在SparkSQL中使用Dataframe获取行的迭代器

Sac*_*ani 7 apache-spark apache-spark-sql apache-spark-1.3

我在SparkSQL中有一个应用程序返回大量非常难以适应内存的行,因此我无法在DataFrame上使用collect函数,是否有一种方法可以将所有这些行作为Iterable instaed of整个行作为列表.

注意:我正在使用yarn-client执行此SparkSQL应用程序

zer*_*323 5

一般来说,将所有数据传输到驱动程序看起来是一个非常糟糕的主意,大多数时候有一个更好的解决方案,但如果你真的想要使用它,你可以toLocalIterator在RDD上使用方法:

val df: org.apache.spark.sql.DataFrame = ???
df.cache // Optional, to avoid repeated computation, see docs for details
val iter: Iterator[org.apache.spark.sql.Row]  = df.rdd.toLocalIterator 
Run Code Online (Sandbox Code Playgroud)