[SCALA] 어떻게 RDD의 내용을 인쇄하려면?
SCALA어떻게 RDD의 내용을 인쇄하려면?
나는 불꽃 콘솔에 컬렉션의 내용을 인쇄하려고 시도하고있다.
나는 유형이 :
linesWithSessionId: org.apache.spark.rdd.RDD[String] = FilteredRDD[3]
그리고 명령을 사용합니다 :
scala> linesWithSessionId.map(line => println(line))
하지만이 인쇄되어 있습니다 :
어떻게 내가 그 내용을보실 수 있습니다 디스크에 콘솔 또는 저장하는 RDD을 쓸 수 있습니까?
해결법
-
==============================
1.당신은 RDD의 내용을 보려는 경우, 하나의 방법은 수집 ()를 사용하는 것입니다 :
당신은 RDD의 내용을 보려는 경우, 하나의 방법은 수집 ()를 사용하는 것입니다 :
myRDD.collect().foreach(println)
RDD 선 수십억이있는 경우 즉, 생각, 좋은 생각이 아니다. 인쇄 할 몇 가지를 취할 테이크 ()를 사용 :
myRDD.take(n).foreach(println)
-
==============================
2.지도 기능은 당신이 그것을에서 작업을 실행할 때까지 실제로 RDD을 평가하지 않을 것이다 불꽃을 의미 변환입니다.
지도 기능은 당신이 그것을에서 작업을 실행할 때까지 실제로 RDD을 평가하지 않을 것이다 불꽃을 의미 변환입니다.
를 인쇄하려면 (액션 인) foreach는 사용할 수 있습니다 :
linesWithSessionId.foreach(println)
당신은 RDD의 API에서 다른 이름으로 저장 한 ... 기능 (정지 동작)를 사용하여 디스크에 기록하기
-
==============================
3.당신은 다음 상황에 다시 인쇄되지 않습니다에 println 클러스터에서이 작업을 실행하는 경우. 당신은 당신의 세션에 RDD 데이터를 가져올 필요가있다. 이 작업을 수행하려면 로컬 배열에 강제로 다음을 인쇄 할 수 있습니다 :
당신은 다음 상황에 다시 인쇄되지 않습니다에 println 클러스터에서이 작업을 실행하는 경우. 당신은 당신의 세션에 RDD 데이터를 가져올 필요가있다. 이 작업을 수행하려면 로컬 배열에 강제로 다음을 인쇄 할 수 있습니다 :
linesWithSessionId.toArray().foreach(line => println(line))
-
==============================
4.당신은) (다음 보여 DataFrame에 당신의 RDD을 변환 할 수 있습니다.
당신은) (다음 보여 DataFrame에 당신의 RDD을 변환 할 수 있습니다.
// 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| +------+---+
-
==============================
5.이 myRDD.foreach (에 println)과 myRDD.collect () 사이에 아마 많은 구조적 차이 (에 println) foreach는.입니다 (뿐만 아니라 '수집'뿐만 아니라 다른 작업). 하나는 차이 I 톱은 myRDD.foreach (에 println)을 수행 할 때, 출력이 임의의 순서에있을 것입니다. 예를 들어 : 내 RDD 각 줄에 번호가 텍스트 파일에서 오는 경우, 출력은 다른 순서를해야합니다. 내가 myRDD.collect (). foreach는 (에 println)를 한 때, 순서는 텍스트 파일처럼 남아있다.
이 myRDD.foreach (에 println)과 myRDD.collect () 사이에 아마 많은 구조적 차이 (에 println) foreach는.입니다 (뿐만 아니라 '수집'뿐만 아니라 다른 작업). 하나는 차이 I 톱은 myRDD.foreach (에 println)을 수행 할 때, 출력이 임의의 순서에있을 것입니다. 예를 들어 : 내 RDD 각 줄에 번호가 텍스트 파일에서 오는 경우, 출력은 다른 순서를해야합니다. 내가 myRDD.collect (). foreach는 (에 println)를 한 때, 순서는 텍스트 파일처럼 남아있다.
-
==============================
6.파이썬에서
파이썬에서
linesWithSessionIdCollect = linesWithSessionId.collect() linesWithSessionIdCollect
이것은 RDD의 모든 내용을 인쇄 출력한다
-
==============================
7.대신 각 시간을 입력하는 수행 할 수 있습니다;
대신 각 시간을 입력하는 수행 할 수 있습니다;
[1] 스파크 쉘 내부의 일반적인 인쇄 방법을 만듭니다.
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
중대한
로컬 모드와 데이터 세트의 소량 작업하는 경우에만 의미가 있습니다. 그렇지 않으면, 당신도 클라이언트에 결과를 참조하거나 때문에 큰 데이터 세트 결과의 메모리가 부족할 수 없습니다.
-
==============================
8.또한 파일로 저장할 수 있습니다 rdd.saveAsTextFile ( "alicia.txt을")
또한 파일로 저장할 수 있습니다 rdd.saveAsTextFile ( "alicia.txt을")
-
==============================
9.
c.take(10)
멋지게 테이블을 표시합니다 최신 버전의 불꽃.
-
==============================
10.자바 구문에서 :
자바 구문에서 :
rdd.collect().forEach(line -> System.out.println(line));
from https://stackoverflow.com/questions/23173488/how-to-print-the-contents-of-rdd by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라에서 FORALL (0) | 2019.11.14 |
---|---|
[SCALA] 몇 가지 선물을 기다리는 방법 (0) | 2019.11.14 |
[SCALA] 어떻게 스칼라를 사용하여 아파치 스파크에 PostgreSQL 데이터베이스에 연결할 수 있습니까? (0) | 2019.11.14 |
[SCALA] 스칼라리스트의 말미에 부가 된 요소 (0) | 2019.11.14 |
[SCALA] 스칼라 함수를 정의의이 세 가지 방법의 차이 (0) | 2019.11.14 |