How to print a String or String[Array] in Scala(spark)?
我正在尝试对字符串中返回的值进行单元测试,但是当我尝试打印控制台时会给出
1 | MapPartitionsRDD[32] |
我的代码如下:
更新时间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | val src = exact_bestmatch_src.filter(line => line.split(",")(0).toInt.equals(i)) val dest = exact_bestmatch_Dest.filter(line => line.split(",")(0).toInt.equals(i)).toArray() for (print1 <- src) { var n1:String = src.toString() var sourceArr: Array[String] = n1.split(",") for (print2 <- dest) { var n2: String = dest.toString() for (i <- 0 until sourceArr.length) { if (n1.split(",")(i).equals(n2.split(",")(i))) { } } |
我也尝试过
我正在尝试比较src和dest RDD,以找出两行之间的差异
在src上调用toString只是意味着您得到的字符串表示形式可以是任何东西。对于RDD,这不是RDD的内容(因为这将需要将RDD的所有内容都提供给驱动程序并立即打印)。
正如其他人提到的那样,为了打印RDD的内容,您需要首先将所有数据发送到驱动程序。
让我们考虑已经提出的简单解决方案:
1 | src.collect().foreach(println) |
第一部分-collect告诉spark获取RDD的所有内容,并将其作为记录序列带给驱动程序。 foreach告诉scala遍历序列中的每个记录,并将其作为参数传递给println函数,后者将打印该记录。当然,您可以使用mkstring而不是foreach来获取单个字符串。
您没有列表或数组。您需要
顺便说一下,
在任何对象上调用
如果要查看RDD中的每条记录以单独的行打印,可以使用:
1 | src.foreach(println) |
这将在保存记录的执行程序(可能是几个不同的执行程序)内的每个记录上运行
或者,如果您有多个执行程序(非本地模式),并且要确保将RDD的元素打印到驱动程序控制台,则可以先将RDD的元素收集到本地集合中,然后再打印它们:
1 | src.collect().foreach(println) |
请注意,这假定RDD足够小,可以收集到单台计算机的内存中。
在RDD上调用