컬렉션의 내용을 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를 콘솔에 쓰거나 내용을 볼 수 있도록 디스크에 저장하려면 어떻게해야합니까?
답변
RDD의 내용을 보려면 다음을 사용하는 방법이 있습니다 collect()
.
myRDD.collect().foreach(println)
그러나 RDD에 수십억 개의 라인이있는 경우 이는 좋은 생각이 아닙니다. 사용하여 take()
인쇄 할 몇 가지를 취할 :
myRDD.take(n).foreach(println)
답변
이 map
함수는 변환 입니다. 즉, Spark에서 작업 을 실행할 때까지 실제로 RDD를 평가하지 않습니다 .
인쇄하려면 다음을 사용할 수 있습니다 foreach
(액션 임).
linesWithSessionId.foreach(println)
디스크에 쓰려면 RDD API 의 saveAs...
함수 (정지 작업) 중 하나를 사용할 수 있습니다.
답변
클러스터에서 이것을 실행하는 경우 println
컨텍스트로 다시 인쇄되지 않습니다. RDD
세션에 데이터 를 가져와야합니다 . 이렇게하려면 로컬 배열에 강제로 적용한 다음 인쇄 할 수 있습니다.
linesWithSessionId.toArray().foreach(line => println(line))
답변
당신은 당신을 변환 할 수 있습니다 RDD
A를 DataFrame
다음 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|
+------+---+
답변
myRDD.foreach(println)
와 사이에는 아마도 많은 구조적 차이가있을 것입니다 myRDD.collect().foreach(println)
( ‘수집’뿐만 아니라 다른 작업도 포함). 내가 본 차이점 중 하나는를 할 때 myRDD.foreach(println)
출력이 임의의 순서로 표시된다는 것입니다. 예를 들어 : 내 rdd가 각 줄에 숫자가있는 텍스트 파일에서 오는 경우 출력 순서가 다릅니다. 그러나 내가했을 때 myRDD.collect().foreach(println)
순서는 텍스트 파일과 동일하게 유지됩니다.
답변
파이썬에서
linesWithSessionIdCollect = linesWithSessionId.collect()
linesWithSessionIdCollect
그러면 RDD의 모든 내용이 출력됩니다.
답변
c.take(10)
Spark 최신 버전은 테이블을 멋지게 표시합니다.