복붙노트

[SCALA] 표준 출력에에 println ()를 잃고 스파크

SCALA

표준 출력에에 println ()를 잃고 스파크

나는 다음과 같은 코드가 있습니다 :

val blueCount = sc.accumulator[Long](0)
val output = input.map { data =>
  for (value <- data.getValues()) {
    if (record.getEnum() == DataEnum.BLUE) {
      blueCount += 1
      println("Enum = BLUE : " + value.toString()
    }
  }
  data
}.persist(StorageLevel.MEMORY_ONLY_SER)

output.saveAsTextFile("myOutput")

그런 다음 blueCount는 0이 아닌,하지만 난 더에 println () 출력 없어! 여기 아무것도 실종? 감사!

해결법

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

    1.이 개념 질문입니다 ...

    이 개념 질문입니다 ...

    당신의 노동자와 그 근로자 n은 RDD 또는 DataFrame의 파티션을 저장 가정 해 봅시다 많은 노동자로 구성, 큰 클러스터가 상상, 당신은 데이터에서지도 작업을 시작하고, 그지도의 내부는 우선, 인쇄 문이 상상 :

    사람들은 따라서 디자이너 / 아파치 - 스파크의 테이너가 어떤지도-감소 작동 내부 인쇄 문에 대한 지원을 (이 축전지를 포함, 심지어 변수 방송) 드롭 논리적으로 결정, 너무 많은 질문입니다.

    스파크가 매우 큰 데이터 세트를 위해 설계된 언어이기 때문에이 또한 의미가 있습니다. 테스트 및 디버깅하는 데 유용 할 수 있습니다 인쇄하는 동안, 당신은 그들이 행 수백만 또는 수십억을 가지고 내장되어 있기 때문에 DataFrame 또는 RDD의 모든 라인을 인쇄하고 싶지 않아요! 당신도 처음에 인쇄 싶지 않을 때 왜 이런 복잡한 문제를 다루는?

    이것을 증명하기 위해 당신은 예를 들어,이 스칼라 코드를 실행할 수 있습니다 :

    // Let's create a simple RDD
    val rdd = sc.parallelize(1 to 10000)
    
    def printStuff(x:Int):Int = {
      println(x)
      x + 1
    }
    
    // It doesn't print anything! because of a logic design limitation!
    rdd.map(printStuff)
    
    // But you can print the RDD by doing the following:
    rdd.take(10).foreach(println)
    
  2. ==============================

    2.나는 유틸리티 기능을하여 주위를 작동 할 수 있었다 :

    나는 유틸리티 기능을하여 주위를 작동 할 수 있었다 :

    object PrintUtiltity {
        def print(data:String) = {
          println(data)
        }
    }
    
  3. from https://stackoverflow.com/questions/33225994/spark-losing-println-on-stdout by cc-by-sa and MIT license