수색…


소개

이 항목에서 Spark 사용자는 Apache Spark 프레임 워크에서 가장 많이 사용되는 구성 요소 인 Spark SQL의 다른 구성을 찾을 수 있습니다.

Spark SQL Shuffle 파티션 제어

Apache Spark에서는 joincogroup 과 같은 셔플 작업을 수행하면서 많은 양의 데이터가 네트워크를 통해 전송됩니다. 이제, shuffle이 발생하는 파티션 수를 제어하는 ​​것은 Spark SQL에 제공된 구성에 의해 제어 될 수 있습니다. 그 구성은 다음과 같습니다 :

spark.sql.shuffle.partitions

이 구성을 사용하여 셔플 작업의 파티션 수를 제어 할 수 있습니다. 기본적으로이 값은 200 입니다. 그러나 우리가 몇 GB의 파일을 가지고 있다면 200 개의 파티션은 의미가 없습니다. 따라서 Spark SQL을 통해 처리해야하는 데이터의 양에 따라 변경해야합니다. 다음과 같이 :

이 시나리오에서는 employeedepartment 합류 할 두 개의 테이블이 있습니다. 두 테이블 모두 레코드 수는 적지 만 각 직원의 부서를 파악하려면이 테이블에 가입해야합니다. 그래서 다음과 같이 Spark DataFrames를 사용하여 이들을 결합합니다.

val conf = new SparkConf().setAppName("sample").setMaster("local")
val sc = new SparkContext(conf)

val employee = sc.parallelize(List("Bob", "Alice")).toDF("name")
val department = sc.parallelize(List(("Bob", "Accounts"), ("Alice", "Sales"))).toDF("name", "department")

employeeDF.join(departmentDF, "employeeName").show()

이제 조인을 할 때 생성되는 파티션의 수는 기본적으로 200입니다. 이는 많은 양의 데이터가 너무 많습니다.

그래서이 값을 변경하여 셔플 작업의 수를 줄일 수 있습니다.

val conf = new SparkConf().setAppName("sample").setMaster("local").set("spark.sql.shuffle.partitions", 2)
val sc = new SparkContext(conf)

val employee = sc.parallelize(List("Bob", "Alice")).toDF("name")
val department = sc.parallelize(List(("Bob", "Accounts"), ("Alice", "Sales"))).toDF("name", "department")

employeeDF.join(departmentDF, "employeeName").show()

이제 셔플 파티션의 수는 셔플 작업의 수를 줄일뿐만 아니라에서 DataFrames에 가입하는 데 걸리는 시간을 줄일 수없는 것이다, 단지 2로 감소 0.878505 s0.077847 s .

따라서 처리되는 데이터에 따라 셔플 작업의 파티션 수를 항상 구성하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow