如何打印RDD的内容?

scala apache-spark

197174 观看

9回复

18898 作者的声誉

我正在尝试将集合的内容打印到Spark控制台。

我有一个类型:

linesWithSessionId: org.apache.spark.rdd.RDD[String] = FilteredRDD[3]

我使用命令:

scala> linesWithSessionId.map(line => println(line))

但这是印刷的:

res1:org.apache.spark.rdd.RDD [Unit] = MappedRDD [4] at map at:19

如何将RDD写入控制台或将其保存到磁盘,以便查看其内容?

作者: blue-sky 的来源 发布者: 2014 年 4 月 19 日

回应 (9)


46

769 作者的声誉

map函数是一个转换,这意味着在您对其执行操作之前,Spark实际上不会评估您的RDD 。

要打印它,您可以使用foreach(这是一个动作):

linesWithSessionId.foreach(println)

要将其写入磁盘,您可以使用RDD API中的一个saveAs...功能(静止操作)

作者: fedragon 发布者: 19.04.2014 06:26

12

12375 作者的声誉

如果您在群集上运行此功能,则println无法打印回您的上下文。您需要将RDD数据带到会话中。为此,您可以将其强制为本地数组,然后将其打印出来:

linesWithSessionId.toArray().foreach(line => println(line))
作者: Noah 发布者: 19.04.2014 06:31

212

2504 作者的声誉

决定

如果要查看RDD的内容,可以使用collect()以下方法:

myRDD.collect().foreach(println)

但是,当RDD有数十亿行时,这不是一个好主意。使用take()仅举几个打印出:

myRDD.take(n).foreach(println)
作者: Oussama 发布者: 24.04.2014 01:53

1

26 作者的声誉

myRDD.foreach(println)和之间可能存在许多架构差异myRDD.collect().foreach(println)(不仅是'收集',还有其他操作)。我看到的差异之一就在于myRDD.foreach(println),输出将是随机顺序。例如:如果我的rdd来自文本文件,其中每行都有一个数字,则输出将具有不同的顺序。但是当我这样做时myRDD.collect().foreach(println),订单仍然就像文本文件一样。

作者: Karan Gupta 发布者: 09.01.2016 09:32

1

65 作者的声誉

在python中

   linesWithSessionIdCollect = linesWithSessionId.collect()
   linesWithSessionIdCollect

这将打印出RDD的所有内容

作者: Niranjan Molkeri 发布者: 25.04.2016 12:57

0

13955 作者的声誉

您还可以另存为文件: rdd.saveAsTextFile("alicia.txt")

作者: Thomas Decaux 发布者: 17.10.2016 11:44

1

3423 作者的声誉

你可以;而不是每次都打字;

[1]在Spark Shell中创建一个通用的打印方法。

def p(rdd: org.apache.spark.rdd.RDD[_]) = rdd.foreach(println)

[2]甚至更好,使用implicits,您可以将函数添加到RDD类以打印其内容。

implicit class Printer(rdd: org.apache.spark.rdd.RDD[_]) {
    def print = rdd.foreach(println)
}

用法示例:

val rdd = sc.parallelize(List(1,2,3,4)).map(_*2)

p(rdd) // 1
rdd.print // 2

输出:

2
6
4
8

重要

只有在本地模式下工作并且数据集少量时才有意义。否则,由于数据集结果较大,您将无法在客户端上看到结果或内存不足。

作者: noego 发布者: 24.12.2016 11:20

10

7766 作者的声誉

您可以将转换RDDDataFrame然后show()它。

// For implicit conversion from RDD to DataFrame
import spark.implicits._

fruits = sc.parallelize([("apple", 1), ("banana", 2), ("orange", 17)])

// convert to DF then show it
fruits.toDF().show()

这将显示数据的前20行,因此数据大小不应成为问题。

+------+---+                                                                    
|    _1| _2|
+------+---+
| apple|  1|
|banana|  2|
|orange| 17|
+------+---+
作者: Wesam 发布者: 17.03.2017 12:00

0

1016 作者的声誉

c.take(10)

和Spark更新的版本将很好地显示表。

作者: Harvey 发布者: 27.10.2018 02:35
32x32