Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pythonで大量データ処理! PySparkを用いたデータ処理と分析のきほん

chie8842
September 07, 2017

Pythonで大量データ処理! PySparkを用いたデータ処理と分析のきほん

PyConJP2017の資料 Python Spark PySpark PyConJP 2017 Apache Spark

chie8842

September 07, 2017
Tweet

More Decks by chie8842

Other Decks in Technology

Transcript

  1. 1ZUIPOͰେྔσʔλॲཧʂ
    1Z4QBSLΛ༻͍ͨσʔλॲཧͱ෼ੳͷ͖΄Μ

    1Z$PO+1
    $IJF)BZBTIJEB

    View Slide

  2. ࣗݾ঺հ
    $IJF)BZBTIJEB

    5XJUUFS!DIJF

    3FUUZ*OD
    4PGUXBSF&OHJOFFS



    1ZUIPOػցֶश)BEPPQ4QBSL4DBMB%#ج൫WJN
    ম೑ϐΞϊςχεεϊϘ

    View Slide

  3. ࠓ೔͓͸ͳ͢͠Δ͜ͱ
    •  "QBDIF4QBSLͷ঺հ
    •  1Z4QBSLͷΞʔΩςΫνϟ
    •  4QBSLͷػցֶशϥΠϒϥϦʹ͍ͭͯ
    •  3FUUZʹ͓͚Δ4QBSLࣄྫʹ͍ͭͯ

    View Slide

  4. ಥવͰ͕͢ʂ
    Pythonでデータ分析
    してる人!

    View Slide

  5. 1Z%BUBͷϥΠϒϥϦ܈
    ͱ͍͑͹ɺ
    ͱ͍͏͘Β͍ɺ1ZUIPO͸σʔλॲཧ΍෼ੳͷͨΊͷ
    ϥΠϒϥϦ͕ͦΖͬͯ·͢Ͷʂ
    ଞʹ΋ͨ͘͞Μʂ
    ศརJ

    View Slide

  6. •  ୆ͷαʔόͰॲཧ͖͠Εͳ͍େن໛σʔλΛѻ͍͍ͨ
    •  σʔλྔ͕εέʔϧͯ͠΋ಈ͘࢓૊Έ͕΄͍͠
    •  େن໛σʔλʹର͢ΔػցֶशΛߦ͍͍ͨ

    ͱ͍ͬͨ৔߹ʹ͸ɺ1Z%BUBϥΠϒϥϦ܈Ͱ͸ରԠ
    ͖͠Εͳ͍৔߹͕͋Δɻ

    ͦΜͳͱ͖ʹ࢖͑Δͷ͕ɺ
    Ͱ΋ɾɾɾ

    View Slide

  7. •  044ͷฒྻ෼ࢄॲཧϑϨʔϜϫʔΫ
    –  ॲཧதͷো֐࣌ͷϦΧόϦ΍ɺλεΫ෼ׂɾεέδϡʔϦϯάΛ
    4QBSL͕͏·͘΍ͬͯ͘ΕΔ
    –  αʔόͷεέʔϧΞ΢τʹΑͬͯεϧʔϓοτ͕ઢܗʹ͍͔ۙͨͪͰ޲্͢Δ
    •  Ϧιʔεར༻࠷దԽͷ޻෉͕͞Ε͓ͯΓɺॲཧ͕ߴ଎
    –  ΦϯϝϞϦϕʔεͷॲཧ
    –  +7.ͷΦʔόϔουΛվળ͢Δ1SPKFDU5VOHTUFO
    –  Ωϟογϡ
    –  ஗ԆධՁ

    •  1ZUIPOΛؚΉෳ਺ͷݴޠ͔Β࢖͑Δ
    –  ࠷৽ͷ4QBSLͩͱɺରԠόʔδϣϯ͸1ZUIPOʹରԠ
    •  ػցֶश΍ετϦʔϜॲཧɺॲཧͷྲྀΕ͕ݟ͑Δ6*ͳͲɺ
    ๛෋ͳػೳ͕͋Δ
    •  ίϛϡχςΟͷ׆ಈ͕׆ൃ
    "QBDIF4QBSLͱ͸ʂ

    View Slide

  8. 4QBSLͷ๛෋ͳػೳ
    4QBSL$PSF
    4QBSL42-
    4QBSL4USFBNJOH
    ʢετϦʔϜॲཧʣ
    .MMJC
    ػցֶश

    (SBQI9
    άϥϑॲཧ

    SQL
    CSV {json}
    S3 BigQuery
    parquet
    Data Sources ༷ʑͳσʔλ
    ιʔεʹରԠ
    ෳ਺ݴޠΛαϙʔτ "1*͕ॆ࣮

    View Slide

  9. Ϧονͳ6*
    DAG Visualiza?on:
    処理の流れが見える
    Event Timeline:
    各タスクの所要時間が見える
    Summary Metrics:
    処理時間やデータ量などの
    メトリクス情報が見える
    •  λεΫͷਐߦঢ়گ΍ϝτϦΫε͕ݟ͑Δ6*͕͋Γɺσόοά͕΍Γ΍͍͢

    View Slide

  10. ͍΍ɺͰ΋෼ࢄॲཧͬͯ
    ΊΜͲͦ͘͞͏ɻ
    ࠷ॳͷҰา͕౿Έग़ͤͳ͍ɻ
    ͬͯࢥ͏ਓ΋ଟ͍ͱࢥ͍·͢ɻ
    大丈夫、Sparkはサーバ1台でも動きます!

    View Slide

  11. ࣮ࡍʹ΍ͬͯΈΑ͏ʂ
    $ wget hIps://d3kbcqa49mib13.cloudfront.net/spark-2.2.0-bin-hadoop2.7.tgz
    $ tar xzvf spark-2.2.0-bin-hadoop2.7.tgz
    $ cd spark-2.2.0-bin-hadoop2.7
    $ bin/pyspark
    4QBSL͔ΒɺQJQͰ΋ΠϯετʔϧͰ͖ΔΑ͏ʹͳΓ·ͨ͠ʂ
    ·ͨɺ%PDLFSΛ࢖͏ͷ΋ศརͰ͢ʂ
    μ΢ϯϩʔυɾΠϯετʔϧͯ͠
    ΠϯλϥΫςΟϒγΣϧΛ্ཱͪ͛Δ·Ͱ
    ͨͬͨίϚϯυʂ

    View Slide

  12. •  )BEPPQΫϥελ্Ͱಈ࡞͢Δ
    •  "NB[PO&.3΍(PPHMF%BUB1SPDͳͲͷ
    ϚωʔδυαʔϏεΛ࢖͏ͱָ
    ຊ֨తʹ෼ࢄॲཧΛߦ͏ͱ͖ͷಈ࡞؀ڥ
    HDFS
    YARN
    MapReduce
    MesosやSpark
    Standaloneもある
    S3など他に様々な
    データソースにも対応する
    並列分散処理
    フレームワーク
    リソース管理、
    ジョブスケジュール
    分散ファイル
    システム
    Basic Stack
    SparkはMapReduceの
    後継と言われる

    View Slide

  13. 4QBSLͷͭͷϓϩάϥϛϯάϞσϧ
    3%%
    •  ίϨΫγϣϯૢ࡞ͷΑ͏ʹॲཧΛ
    هड़͢Δ
    •  ඇߏ଄Խσʔλʹର͢Δॊೈͳ
    ॲཧ͕ߦ͑Δ
    •  ߦࢦ޲ͷॲཧ

    %BUBGSBNF
    •  42-ϥΠΫʹॲཧΛهड़͢Δ
    •  εΩʔϚΛར༻ͨ͠ߏ଄Խσʔλॲ

    •  ྻࢦ޲ͷॲཧ


    %BUBGSBNF͸ɺ4QBSL͔Βొ৔ͨ͠ϋΠϨϕϧ"1*Ͱɺ
    ɾΦϓςΟϚΠβʹΑΔ࠷దԽͷԸܙΛड͚Δ
    ɾίʔυͷՄಡੑ্͕͕Δ
    ͱ͍ͬͨಛ௃͕͋Δ

    View Slide

  14. 3%%ͱ%BUB'SBNF
    Spark Core
    Spark SQL
    Spark Streaming
    (ストリーム処理)
    Mllib
    (機械学習)
    GraphX
    (グラフ処理)
    SQL
    CSV {json}
    S3 BigQuery
    parquet
    Data Sources
    •  3%%͸4QBSL$PSFɺ%BUB'SBNF͸4QBSL42-ʹؚ·ΕΔػೳ
    •  4QBSLͷػೳ͸ঃʑʹ%BUB'SBNFϕʔεʹஔ͖׵Θ͍ͬͯΔ
      4USVDUVSFE4USFBNJOH4QBSL.-(SBQI'SBNFT
    RDD
    DataFrame

    View Slide

  15. %BUB'SBNFͷΦϓςΟϚΠβʹΑΔ࠷దԽ
    •  ޮ཰తͳॲཧͷॱ൪ʹೖΕସ࣮͑ͯߦͯ͘͠ΕΔ
    •  σʔλιʔεʹΑͬͯ͸ɺϑΟϧλॲཧΛσʔλɾιʔεଆͰߦ͍ɺ
    ඞཁͳσʔλͷΈΛಡΈࠐΉΑ͏ʹ͢Δ
    hIps://databricks.com/blog/2015/03/24/spark-sql-graduates-from-alpha-in-spark-1-3.html

    View Slide

  16. 3%%Ͱ8PSE$PVOUͯ͠ΈΑ͏ʂ
    Jupyter Notebookからも
    かんたんに使える!
    加工して
    集計して
    並び替え

    View Slide

  17. %BUB'SBNFͰूܭॲཧΛ΍ͬͯΈΑ͏ʂ
    フィルターして グループごとに
    集めて
    カウントする
    SQLライクにかける!

    View Slide

  18. 1Z4QBSLͷΞʔΩςΫνϟ
    •  3%%
    ϫʔΧʔϊʔυͰͷॲཧ͸1ZUIPOϓϩηεͰߦΘΕΔ
    •  %BUB'SBNF
    ϫʔΧʔϊʔυͰͷॲཧ͸+7.্ͰߦΘΕΔ
    ͨͩ͠6%'͸1ZUIPOϓϩηεͰ࣮ߦ͞ΕΔ
    Master Worker
    Spark
    Context Java
    SparkContext
    Executor
    Task
    Task
    Python
    Python
    socket
    Py4J
    pipe
    Master Worker
    Spark
    Context Java
    SparkContext
    Executor
    Task
    Task
    socket
    Py4J

    View Slide

  19. 1Z4QBSLͷΞʔΩςΫνϟ
    •  3%%
    ϫʔΧʔϊʔυͰͷॲཧ͸1ZUIPOϓϩηεͰߦΘΕΔ
    •  %BUB'SBNF
    ϫʔΧʔϊʔυͰͷॲཧ͸+7.্ͰߦΘΕΔ
    ͨͩ͠6%'͸1ZUIPOϓϩηεͰ࣮ߦ͞ΕΔ
    Master Worker
    Spark
    Context Java
    SparkContext
    Executor
    Task
    Task
    Python
    Python
    socket
    Py4J
    pipe
    Master Worker
    Spark
    Context Java
    SparkContext
    Executor
    Task
    Task
    socket
    Py4J
    ύϑΥʔϚϯε্ͷ໰୊఺
    •  *UFSBUPS୯ҐͰͷTFSJBMJ[BUJPOͱQZUIPOϓϩηε΁ͷύΠϓ
    ͕ൃੜ
    •  QJDLMJOHͱ+7.ͷೋॏͷTFSJBMJ[BUJPOʹΑΔίετ૿
    •  1ZUIPO8PSLFSͷىಈ
    •  1ZUIPO8PSLFSͷϝϞϦ͸+7.ͷ੍ޚର৅֎

    View Slide

  20. ύϑΥʔϚϯεൺֱ
    出典:DataBricks社のブログ
    hIps://databricks.com/blog/2015/02/17/introducing-dataframes-in-spark-for-large-scale-data-
    science.html
    3%%1ZUIPO͸஗͍ʂ

    View Slide

  21. 1Z4QBSLͷ͍͍ͱ͜Ζʂ
    •  1Z%BUBϥΠϒϥϦͱ૊Έ߹Θͤͯ࢖͏͜ͱ͕Ͱ͖Δ
    –  3%%ͷதͰ/VNQZ΍4DJQZΛ࢖͏
    –  ूܭ݁ՌΛ1BOEBT%BUB'SBNFʹม׵ͯ͠.BUQMPUMJCͰ
    ՄࢹԽ͢Δ
    •  .-ϥΠϒϥϦ౳ʹ͍ͭͯ΋ɺ΄΅શͯར༻Ͱ͖Δ

    View Slide

  22. 1Z4QBSLΤίγεςϜͷਐԽ
    •  1Z4QBSLͰ͸ɺQBOEBT%BUB'SBNFͱ4QBSL%BUB'SBNFͷ
    ૬ޓม׵͕Ͱ͖Δɻ
    –  QBOEBTͷEG͔ΒTQBSLͷEG
    •  TQBSLDSFBUF%BUB'SBNF QE@EG

    –  TQBSLͷEG͔ΒQBOEBTͷEG
    •  TQBSL@EGUP1BOEBT


    ͕ʂʂ্هͷม׵͸ڪΖ͘͠஗͍ɻɻɻ
    ʢಛʹલऀʣ

    •  ͜ΕΛղফ͢΂͘"QBDIF"SSPXͷ։ൃ͕ਐΜͰ͍Δ

    View Slide

  23. "QBDIF"SSPX
    •  σʔλϑΥʔϚοτͷ࢓༷ͱͦΕΛར༻͢ΔͨΊͷϥΠϒϥϦ
    •  ҟͳΔݴޠɾϓϩμΫτؒͰͷσʔλ࿈ܞίετΛԼ͛Δ
    •  ։ൃதͷ4QBSLͰ
    TQBSLDPOGTFU lTQBSLTRMFYFDVUJPOBSSPXFOBCMFz lUSVFz
    ͱ͢Δ͜ͱͰɺ
    4QBSL%BUB'SBNFΛUP1BOEBT
    ͢Δࡍʹɺ"SSPXͷϑΥʔϚοτ͕
    ࢖͑ΔΑ͏ʹͳΔ༧ఆ
    •  ଞʹ΋6%'ͷ7FDUPSJ[BUJPOͳͲ΋ܭը͞Ε͍ͯΔ
    出典:hIps://arrow.apache.org/

    View Slide

  24. 4QBSL.BDIJOF-FBSOJOH
    •  4QBSLʹ͸ɺ3%%ϕʔεͷ.MMJCͱ%BUB'SBNFϕʔεͷ
    .-ͱ͍͏ͭͷػցֶशϥΠϒϥϦ͕͋Δɻ
    –  ঃʑʹ.-ʹد͍ͤͯΔ
    •  TDJLJUMFBSOͷӨڹΛڧ͘ड͚͍ͯΔ

    View Slide

  25. 1Z4QBSLͰ࢖͑Δ୅දతͳػցֶशख๏Ұཡ
    •  $MBTTJpDBUJPO 3FHSFTTJPO
    –  47.TɺϩδεςΟοΫճؼɺܾఆ໦ɺφΠʔϒϕΠζɺϥϯμϜϑΥϨε
    τɺઢܗճؼɺ(#5ɺϚϧνύʔηϓτϩϯɺJTPUPOJDճؼɺ"'5ੜଘճؼ
    •  $MVTUFSJOH
    –  ,NFBOTɺ-%"ɺ(..
    •  ڠௐϑΟϧλϦϯάɺύλʔϯϚΠχϯά
    –  "-4ɺ/.'ɺ'1(SPXUI
    •  ࣍ݩ࡟ݮ
    –  47%ɺ1$"
    •  'FBUVSF&YUSBDUBOE5SBOTGPSN
    –  5'*%'ɺ8PSE7FDɺ4UBOEBSE4DBMFSɺ/PSNBMJ[FSɺ/HSBNɺ
    0OF)PU&ODPEFSɺ4USJOH*OEFYFSɺ-BCFMFE1PJOUɺ%$5
    •  #BTJDTUBUJTUJDT
    –  Χʔωϧີ౓ਪఆɺΧΠೋ৐ݕఆɺίϧϞΰϩϑεϛϊϑݕఆ
    •  &WBMVBUPS 5VOJOH (FOFSBUPS
    –  "6$ɺ$SPTT7BMJEBUPSɺ1BSBN(SJE#VJMEFSɺ֤छσʔλ(FOFSBUPS
    FUDʜ

    View Slide

  26. 4QBSLͰϨίϝϯσʔγϣϯ෼ΫοΩϯάʂ
    デモ

    View Slide

  27. ʢ͍ͭͰʹ঺հʣ"QBDIF;FQQFMJO
    •  +VQZUFS/PUFCPPLͱಉ͡Α͏ʹ࢖͑ΔՄࢹԽπʔϧ
    •  ༷ʑͳ࣮ߦΤϯδϯΛαϙʔτ͢Δ

    View Slide

  28. ෼ੳݱ৔Ͱͷ1Z4QBSLͷ͔͍ͭͲ͜Ζ
    •  ,1*ϨϙʔςΟϯάͷΑ͏ͳ෼ੳͷݱ৔Ͱ͸ɺΘ͟Θ͟
    େྔσʔλΛѻΘͣͱ΋αϯϓϦϯάͯ͠୆ͷαʔό
    ্ͰॲཧΛߦ͏΄͏͕ྑ͍৔߹΋ଟ͍ɻ
    –  ͨ͘͞ΜͷσʔλͰΫϥελϦϯάͳͲͷֶशΛߦ͏͜ͱͰ
    ͔͑ͬͯաֶशʹͳΔ͜ͱ΋͋Δɻ
    •  Ϩίϝϯσʔγϣϯɺҟৗݕ஌ɺ޿ࠂ഑৴࠷దԽ౳ɺ
    େن໛σʔλʹରͯ͠ػցֶशΛߦ͏ඞཁ͕͋Δ৔໘Ͱ
    ࢖ΘΕΔɻ
    ࢖͍ॴͷݟఆΊ͸͍ͩ͡ɻ

    View Slide

  29. 3FUUZʹ͓͚Δ1Z4QBSLࣄྫ

    View Slide

  30. 3FUUZͷ݄ؒສ66Λࢧ͑Δ෼ੳج൫
    ReIyαʔϏεج൫ ReIy෼ੳج൫ʢAWSʣ
    ReIy෼ੳج൫ʢGCPʣ
    Kinesis S3 EMR
    (Spark)
    S3
    EC2
    EC2
    RDS(MySQL)
    分析者
    プランナ
    ここでSparkを
    使っている

    View Slide

  31. &5-ͷ֓ཁ
    •  3FUUZͷΞΫηεϩά
    –  ೔ʹ਺े(#ʢH[KTPOঢ়ଶʣͷϩά
    –  SFRVFTU63*΍VTFSBHFOUͳͲΛ෼ੳ͠΍͍͢ܗʹ੔ܗ
    –  ෼ੳ༻ͷTFTTJPO*%Λ&5-ͷաఔͰ෇༩
    •  TFDPOEBSZTPSUͱNBQQBSUJUJPOΛ࢖ͬͨ

    View Slide

  32. 1Z4QBSLΛ࠾༻ͨ͠ཧ༝
    •  ϚωʔδυɾαʔϏεʢ&.3ʣΛར༻Ͱ͖ΔͨΊɺ
    ؀ڥߏங͕ෆཁ
    –  EBTL΍$FMFSZ΋ީิͱͯ͠͸͋Δ͕ɺ؀ڥߏங͕ඞཁͱͳΔɻ
    ·ͨ͜ΕΒ͸σʔλྔͷεέʔϧʹ଱͑ΒΕͳ͍Մೳੑ͕͋Δ
    •  ࣾ಺ʹ1ZUIPO࢖͍͕ଟ͍ͨΊɺϝϯςφϯεΛߟྀͯ͠
    4DBMBͰͳ͘1ZUIPOΛ࠾༻ͨ͠
    •  )JWF΍1SFTUPʢ)BEPPQΤίγεςϜʣͱൺ΂ɺඇߏ଄
    σʔλʹର͢Δॊೈͳදݱ͕΍Γ΍͍͢
    –  ෼ੳཁ݅ͷͨΊɺΞϓϦέʔγϣϯଆͰৼΒΕΔTFTTJPO*%ͱ͸
    ผͰTFTTJPO*%૬౰ͷ΋ͷΛ෇༩ͯ͠΄͍͠ͱͷཁ๬͕͋Γɺ
    ͜ΕΛຬͨͨ͢ΊʹɺෳࡶͳίϨΫγϣϯॲཧΛߦ͏ඞཁ͕
    ͋ͬͨ
    ちなみに、想定通り、ここの処理だけRDDなので遅い。
    が、許容できる範囲だった。

    View Slide

  33. 1Z4QBSL ʴ&.3
    ͷύϑΥʔϚϯε্ͷ5JQTΛ͍͔ͭ͘

    •  ͳΔ΂͘%BUB'SBNFΛ࢖͏
    •  ͳΔ΂͘ॲཧ͢ΔσʔλྔΛݮΒ͢
    –  KPJO͸খ͍͞σʔλಉ࢜Λઌʹ
    •  ετϨʔδͷར༻
    –  ӬଓԽϑΝΠϧ͸4
    –  தؒϑΝΠϧ͸)%'4
    •  σʔλϑΥʔϚοτ͸1BSRVFUΛར༻͢Δͱߴ଎
    •  σʔλͷ4LFXʹ஫ҙ
    –  ҰͭͷύʔςΟγϣϯ͚ͩॲཧ͢Δσʔλྔ͕ଟ͘ͳͬͯɺͦ
    ͜ͷॲཧ଴ͪʹͳΔ

    View Slide

  34. 1Z4QBSL ʴ&.3
    ͷύϑΥʔϚϯε্ͷ5JQTΛ͍͔ͭ͘

    •  ϝϞϦνϡʔχϯάͷίπ
    –  1ZUIPOͰ4QBSLΛ࢖͏৔߹ɺ4DBMBͱൺ΂ͯΦϑώʔϓʢ+7.֎
    ͷϝϞϦʣΛར༻͢ΔɻͦͷͨΊɺZBSOʹΑͬͯίϯςφ͕LJMM
    ͞ΕΔΤϥʔ͕ى͖΍͍͢ɻTQBSLQZUIPOXPSLFSNFNPSZ΍
    TQBSLZBSOFYFDVUPSNFNPSZ0WFSIFBEύϥϝʔλͰνϡʔχϯ
    άΛߦ͏
    •  "QBDIF;FQQFMJO
    –  &.3Ͱ͸ɺ+VQZUFS/PUFCPPLΛΠϯετʔϧ͠ͳͯ͘΋ɺ
    "QBDIF;FQQFMJOͱ͍͏/PUFCPPL͕࢖͑Δɻ

    View Slide

  35. ·ͱΊ
    •  4QBSL͸ɺେྔσʔλΛߴεϧʔϓοτͰॲཧ͢Δ͜ͱ
    ͷͰ͖ΔศརͳϓϩμΫτ
    •  ػցֶश΍ετϦʔϜͳͲ๛෋ͳػೳ͕͋Δ
    •  &.3΍%BUB1SPDͳͲͷϚωʔδυαʔϏε͕ศར
    •  1Z4QBSLΛར༻͢Δ৔߹͸Φʔόϔου͕͋Δ
    •  ࢖͍Ͳ͜ΖΛ͖ͪΜͱཧղ͢Δ͜ͱ͕͍ͩ͡
    •  3FUUZͰ͸σʔλΤϯδχΞϦϯάʹ1Z4QBSLΛ࠾༻ͯ͠
    ͍Δ
    みなさんも、PySparkで大量データ処理やってみよう!

    View Slide

  36. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠J

    View Slide

  37. ิ଍
    1ZUIPO੡ͷଞͷฒྻ෼ࢄॲཧܥͱͷൺֱ
    1ZUIPO੡ͷฒྻ෼ࢄॲཧܥʢDFMFSZ EBTLʣͱ4QBSLͷେ͖
    ͳҧ͍ͱͯ͠͸ɺΫϥελن໛ͷΧόʔྖҬ͕͋͛ΒΕΔɻ
    ·ͨɺ4QBSLͷ৔߹ɺΫϥ΢υΛ࢖͏͜ͱͰ؀ڥߏஙΛߦ
    Θͳͯ͘ྑ͍ͱݴ͏ϝϦοτ͕͋Δɻ
    サーバ台数の目安
    Celery
    dask
    (py)spark
    1台 4〜5台 数千台

    View Slide

  38. ิ଍
    4QBSLϢʔβͷ֤ݴޠར༻ऀͷׂ߹
    出典:Spark Survery 2016 hIps://databricks.com/blog/2016/09/27/spark-survey-2016-released.html

    View Slide

  39. ิ଍
    ηΧϯμϦιʔτͱNBQQBSUJUJPOͷઆ໌
    [(0,4), (2,4), (3,1), (2,2), (0,1), (1,1),(1,8), (3,6)]
    [(0,1), (0,4), (2,2), (2,4)] [(0,1), (1,1), (1,8), (3,1), (3,6)]
    もとの配列
    パーティションキー
    とそれ以外の値で
    ソートする
    [(0,1), (0,5), (2,2), (2,5)] [(0,1), (1,1), (1,9), (3,1), (3,7)]
    secondary
    sort
    mappar??on
    par??onごとに一度
    処理を実行する

    View Slide