복붙노트

[SCALA] 어떻게 RDD의 내용을 인쇄하려면?

SCALA

어떻게 RDD의 내용을 인쇄하려면?

나는 불꽃 콘솔에 컬렉션의 내용을 인쇄하려고 시도하고있다.

나는 유형이 :

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

그리고 명령을 사용합니다 :

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

하지만이 인쇄되어 있습니다 :

어떻게 내가 그 내용을보실 수 있습니다 디스크에 콘솔 또는 저장하는 RDD을 쓸 수 있습니까?

해결법

  1. ==============================

    1.당신은 RDD의 내용을 보려는 경우, 하나의 방법은 수집 ()를 사용하는 것입니다 :

    당신은 RDD의 내용을 보려는 경우, 하나의 방법은 수집 ()를 사용하는 것입니다 :

    myRDD.collect().foreach(println)
    

    RDD 선 수십억이있는 경우 즉, 생각, 좋은 생각이 아니다. 인쇄 할 몇 가지를 취할 테이크 ()를 사용 :

    myRDD.take(n).foreach(println)
    
  2. ==============================

    2.지도 기능은 당신이 그것을에서 작업을 실행할 때까지 실제로 RDD을 평가하지 않을 것이다 불꽃을 의미 변환입니다.

    지도 기능은 당신이 그것을에서 작업을 실행할 때까지 실제로 RDD을 평가하지 않을 것이다 불꽃을 의미 변환입니다.

    를 인쇄하려면 (액션 인) foreach는 사용할 수 있습니다 :

    linesWithSessionId.foreach(println)
    

    당신은 RDD의 API에서 다른 이름으로 저장 한 ... 기능 (정지 동작)를 사용하여 디스크에 기록하기

  3. ==============================

    3.당신은 다음 상황에 다시 인쇄되지 않습니다에 println 클러스터에서이 작업을 실행하는 경우. 당신은 당신의 세션에 RDD 데이터를 가져올 필요가있다. 이 작업을 수행하려면 로컬 배열에 강제로 다음을 인쇄 할 수 있습니다 :

    당신은 다음 상황에 다시 인쇄되지 않습니다에 println 클러스터에서이 작업을 실행하는 경우. 당신은 당신의 세션에 RDD 데이터를 가져올 필요가있다. 이 작업을 수행하려면 로컬 배열에 강제로 다음을 인쇄 할 수 있습니다 :

    linesWithSessionId.toArray().foreach(line => println(line))
    
  4. ==============================

    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. ==============================

    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. ==============================

    6.파이썬에서

    파이썬에서

       linesWithSessionIdCollect = linesWithSessionId.collect()
       linesWithSessionIdCollect
    

    이것은 RDD의 모든 내용을 인쇄 출력한다

  7. ==============================

    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. ==============================

    8.또한 파일로 저장할 수 있습니다 rdd.saveAsTextFile ( "alicia.txt을")

    또한 파일로 저장할 수 있습니다 rdd.saveAsTextFile ( "alicia.txt을")

  9. ==============================

    9.

    c.take(10)
    

    멋지게 테이블을 표시합니다 최신 버전의 불꽃.

  10. ==============================

    10.자바 구문에서 :

    자바 구문에서 :

    rdd.collect().forEach(line -> System.out.println(line));
    
  11. from https://stackoverflow.com/questions/23173488/how-to-print-the-contents-of-rdd by cc-by-sa and MIT license