apache-spark - 이란 - spark write




Spark SQL에서 파티션 크기를 제어하는 방법 (2)

Spark SQL HiveContext 사용하여 Hive 테이블에서 데이터를로드하고 HDFS에로드해야합니다. 기본적으로 SQL 출력의 DataFrame 에는 2 개의 파티션이 있습니다. 더 많은 병렬 처리를 얻으려면 SQL에서 더 많은 파티션이 필요합니다. HiveContex t에는 number of partitions 매개 변수를 사용하는 오버로드 된 메서드가 없습니다.

RDD를 다시 파티션하면 셔플 링이 발생하고 처리 시간이 길어집니다.

>

val result = sqlContext.sql("select * from bt_st_ent")

로그 출력은 다음과 같습니다.

Starting task 0.0 in stage 131.0 (TID 297, aster1.com, partition 0,NODE_LOCAL, 2203 bytes)
Starting task 1.0 in stage 131.0 (TID 298, aster1.com, partition 1,NODE_LOCAL, 2204 bytes)

SQL 출력의 파티션 크기를 늘릴 수있는 방법이 있는지 알고 싶습니다.


SQL이 셔플을 수행하는 경우 (예를 들어, 조인 또는 일종의 그룹 기준), 'spark.sql.shuffle.partitions'특성을 설정하여 파티션 수를 설정할 수 있습니다.

 sqlContext.setConf( "spark.sql.shuffle.partitions", 64)

Fokko가 제안한 내용에 따라 임의 변수를 사용하여 군집화 할 수 있습니다.

val result = sqlContext.sql("""
   select * from (
     select *,random(64) as rand_part from bt_st_ent
   ) cluster by rand_part""")

매우 흔하고 고통스러운 문제. 균일 한 파티션으로 데이터를 분배하는 키를 찾아야합니다. DISTRIBUTE BYCLUSTER BY 연산자를 사용하여 파티션의 행을 그룹화하도록 Spark에 지시 할 수 있습니다. 이로 인해 쿼리 자체에 약간의 오버 헤드가 발생합니다. 그러나 균일 한 크기의 파티션이 생성됩니다. Deepsense 는 이에 대한 훌륭한 자습서를 제공합니다.







partitioning