스파크에 대해 이해하는 것이 매우 중요한 한 가지는 분산 환경이라는 것입니다.
RDD
은 Resilient Distributed Datasets
의 약식입니다. 스파크 RDD의 항목은 일반적으로 partitions
으로 나뉘며, 이는 Spark 클러스터의 다양한 노드에 분산되어 있습니다.
당신이 yourRdd.map(a => a.toString)
같은 전화
이 RDD의
map
구현은 첫째, 클로저이
a => a.toString
기능을 포장 한 후이
RDD
의
partitions
이있는 모든 노드에 보내 그 폐쇄를 직렬화하는 것을 알고있다. 결과의 실제 계산은 해당 노드에서 수행됩니다.
그래서 ... RDD
을 다루는 경우 배포판을 RDD
api와 평범한 스칼라 API를 혼동하지 않도록주의하십시오.
당신에게있을 것입니다 코드의 조각을 작성하는 권장되는 방법, 당신의 SparkConf.set(c(0), c(1))
라인 여기
val yourRdd = sc.textFile("hdfs://ip:8020/property.conf"))
yourRdd.foreach(line =>
val c = line.split("=")
println(c(0) + " " + c(1))
)
, SparkConf
는 class
그리고 당신은 일반적으로 classes
를 직렬화 할 수 없습니다. class SparkConf
에 멤버 함수 set
도 호출 할 수 없습니다. classes
의 인스턴스를 만들어야합니다. 또한 SparkConf
은 serializable 인터페이스를 구현하지 않는 클래스이기 때문에 SparkConf
의 인스턴스조차도 직렬화 할 수 없습니다.
보통 SparkConf
을 초기화해야하는 SparkContext
이 없으면 RDD가 존재하지 않으므로 RDD를 작성하는 데 스파크 RDD를 사용하지 않아야합니다.
하지만이 경우에는 꼭해야한다고 말한 다음 RDD에서 정상적인 스칼라 목록을 얻은 다음 SparkConf를 만드는 데 사용하십시오.
val mySparkConf = new SparkConf()
val yourRdd = sc.textFile("hdfs://ip:8020/property.conf"))
val yourList = yourRdd.foreach(line =>
val c = line.split("=")
).collect.toList
yourList.foreach(c => mySparkConf.set(c(0), c(1)))
Google에서 검색했습니다. 그러나 이것에 특정한 무엇이든을 찾아 내지 않았다. 이걸 연재 할 수있는 방법이 있습니까 – Darshan