<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>devkuma – Apache Spark</title>
    <link>https://www.devkuma.com/jp/tags/apache-spark/</link>
    <image>
      <url>https://www.devkuma.com/jp/tags/apache-spark/logo/180x180.jpg</url>
      <title>Apache Spark</title>
      <link>https://www.devkuma.com/jp/tags/apache-spark/</link>
    </image>
    <description>Recent content in Apache Spark on devkuma</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>jp</language>
    <managingEditor>kc@example.com (kc kim)</managingEditor>
    <webMaster>kc@example.com (kc kim)</webMaster>
    <copyright>The devkuma</copyright>
    
	  <atom:link href="https://www.devkuma.com/jp/tags/apache-spark/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Apache Spark</title>
      <link>https://www.devkuma.com/jp/docs/apache-spark/</link>
      <pubDate>Sat, 24 Dec 2022 10:22:54 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/apache-spark/</guid>
      <description>
        
        
        &lt;h2 id=&#34;apache-sparkの概要&#34;&gt;Apache Sparkの概要&lt;/h2&gt;
&lt;p&gt;Apache Sparkは、ビッグデータや機械学習のような大規模データを処理する&lt;strong&gt;クラスタコンピューティングのための分散処理フレームワーク&lt;/strong&gt;である。Sparkは2009年にカリフォルニア大学バークレー校のAMPLabで、HadoopのコミッターでもあるMate Zahariaによって開発が開始され、現在はApacheソフトウェア財団のトップレベルプロジェクトの一つとして管理、開発されている。&lt;/p&gt;
&lt;p&gt;Sparkが開発された目的としては、従来のMapReduceの処理速度の遅さを改善することと、MapとReduceの繰り返しというスタイルに縛られない柔軟な処理スタイルへの対応が挙げられる。&lt;/p&gt;
&lt;p&gt;Sparkは分散処理フレームワークとして単独でも動作するため、ポストHadoopとして注目されている一方で、MapReduce、HDFS、YARNなどで構成されるHadoopコアシステム内のMapReduceの代替として利用することも可能である。&lt;/p&gt;
&lt;h2 id=&#34;apache-sparkの主な特徴&#34;&gt;Apache Sparkの主な特徴&lt;/h2&gt;
&lt;p&gt;Sparkの大きな特徴として、Sparkが提供する簡潔なAPIを使用して柔軟な処理モデルを簡単にプログラミングできること、大規模データを従来のMapReduceに比べてはるかに短い時間で処理できることなどが挙げられる。&lt;/p&gt;
&lt;p&gt;従来のMapReduceでは、処理モデルとしてMapとReduceを1セットで実行する必要があったため、Hadoop上で動作するアプリケーションを開発するにはこのスタイルに従って開発する必要があった。そのため、柔軟な処理モデルを開発することが難しいという問題があった。&lt;/p&gt;
&lt;p&gt;またMapReduceでは、1回のMapおよびReduce処理ごとに処理結果をディスクへ書き込むため、処理速度を向上させることが難しいという問題があった。これに対してSparkでは、メモリに読み込んだデータセット（RDD）に対して複数回のMap処理を連続して実行し、さらにReduceした結果をディスクに書き込まずインメモリ状態のまま次のMap処理をそのデータセットに対して行う方式を取っているため、MapReduceに比べて最大100倍以上の処理速度向上が見られる場合もあるとされる（従来のMapReduceと同様に処理結果をディスクへ書くこともできる）。&lt;/p&gt;
&lt;p&gt;Sparkの特徴は次のとおりである。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Speed
&lt;ul&gt;
&lt;li&gt;インメモリ（In-Memory）ベースの高速処理&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ease of Use
&lt;ul&gt;
&lt;li&gt;Java、Scala、Python、R、SQLなど多様な言語対応による使いやすさ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Generality
&lt;ul&gt;
&lt;li&gt;SQL、Streaming、機械学習、グラフ演算など多様なコンポーネントを提供&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Run Everywhere
&lt;ul&gt;
&lt;li&gt;YARN、Mesos、Kubernetesなど多様なクラスターで動作可能&lt;/li&gt;
&lt;li&gt;HDFS、Cassandra、HBaseなど多様なファイル形式とストレージをサポート&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;apache-sparkのコンポーネント構成&#34;&gt;Apache Sparkのコンポーネント構成&lt;/h2&gt;
&lt;p&gt;Sparkは分散処理フレームワークとして、次のコンポーネント要素で構成される。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spark Core（Scala、Java、Python、R APIを含む）&lt;/li&gt;
&lt;li&gt;Spark SQL + DataFrames&lt;/li&gt;
&lt;li&gt;Spark Streaming&lt;/li&gt;
&lt;li&gt;MLlib&lt;/li&gt;
&lt;li&gt;GraphX&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;spark-core&#34;&gt;Spark Core&lt;/h3&gt;
&lt;p&gt;Sparkは処理するデータをRDD（Resilient Distributed Dataset）形式で保持する。&lt;br&gt;
RDDは不変で並列実行可能なコレクションであり、分散された各コンピューターに配置される。&lt;br&gt;
Sparkを使用したプログラミングモデルでは、このRDDに対してSpark Coreで提供されている各種メソッドを適用しながら処理を行っていく。Spark Coreが提供するAPIを通じてRDDを操作するとき、開発者は分散されたデータを意識せずに分散処理を実行できる。&lt;br&gt;
これはSparkの特徴の一つである、柔軟な処理を容易にプログラミングできるという点である。&lt;br&gt;
Spark Coreで提供されるAPIは、Sparkの開発言語であるScala以外にも、Java、Python、Rといった言語から呼び出し可能なAPIが標準で提供されている。また、サードパーティライブラリの中には、Scalaと同じくJava VM上で動作する関数型言語ClojureからSpark APIを呼び出すためのライブラリも存在しており、他の言語向けSpark APIも今後増えていくと予想される。&lt;/p&gt;
&lt;h3 id=&#34;spark-sql--dataframes&#34;&gt;Spark SQL + DataFrames&lt;/h3&gt;
&lt;p&gt;Sparkでは、Sparkが提供するAPIを通じてRDDを操作する方法のほかに、Spark SQLというSQLのような言語を使用して、DataFramesというデータベーステーブルのような名前付き列を持つ抽象化されたデータセットを操作できる。&lt;br&gt;
これはScala、Java、Python、Rのような言語を習得していないユーザーでも、SQLの知識があればSpark SQLを通じてSparkでデータを処理できるインターフェースである。&lt;/p&gt;
&lt;h3 id=&#34;spark-streaming&#34;&gt;Spark Streaming&lt;/h3&gt;
&lt;p&gt;Spark Streamingは、Sparkに絶えず送信されるストリーミングデータに対してリアルタイム分散処理を可能にする機能を提供するエンジンである。&lt;br&gt;
同様にストリーミングデータを処理するフレームワークとしてApache Stormがある。Apache Stormがストリーミングデータ処理に特化したフレームワークである一方、Spark StreamingはSparkでリアルタイムデータを処理するエンジンとしての機能である。&lt;br&gt;
ほかにもApache Flinkというストリーミング処理フレームワークがある。こちらはバッチ処理も可能であり、機械学習ライブラリやグラフ処理ライブラリなども存在するため、Sparkにかなり似た構成となっており、Sparkの対抗馬と呼ばれている。&lt;/p&gt;
&lt;p&gt;Apache Storm&lt;br&gt;
&lt;a href=&#34;http://storm.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://storm.apache.org/&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Apache Flink&lt;br&gt;
&lt;a href=&#34;http://flink.apache.org/introduction.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://flink.apache.org/introduction.html&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;mllib&#34;&gt;MLlib&lt;/h3&gt;
&lt;p&gt;MLlibはSparkの機械学習ライブラリである。Sparkの柔軟な処理スタイルで機械学習を実行するプログラムを作成できる。&lt;br&gt;
機械学習ライブラリとしては、まずHadoopと連携して機械学習を行うMahoutというソフトウェアが存在したが、Hadoop + MahoutではMapReduceのプログラミングモデルを使用して機械学習プログラムを作成する必要があり、処理速度低下という問題があった。&lt;br&gt;
それに比べてSparkはHadoopより高速に処理でき、SparkとSparkが提供するMLlibを使用した機械学習は効率がよいという点で注目が高まっている。&lt;/p&gt;
&lt;p&gt;Apache Mahout&lt;br&gt;
&lt;a href=&#34;http://mahout.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://mahout.apache.org/&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;graphx&#34;&gt;GraphX&lt;/h3&gt;
&lt;p&gt;GraphXはSparkを通じてグラフデータを並列処理するAPIを提供する。&lt;br&gt;
Sparkの特徴である高速処理により、グラフデータの並列処理が可能である。&lt;/p&gt;
&lt;p&gt;上で説明したSparkを構成する一部のコンポーネントには、ストレージに分類されるものがない。
Sparkでは読み書きに既存の各種ストレージを利用できる。以下はSparkと連携可能なストレージの一部である（サードパーティライブラリ利用を含む）。&lt;/p&gt;
&lt;p&gt;HDFS, Cassandra, HBase, S3, MongoDB, Couchbase, Riak, Neo4j, OrientDB&lt;/p&gt;
&lt;p&gt;また、読み取れるデータソースとしてはCSVやXMLなどのファイルから、Solr、Elasticsearchなどの検索エンジンまで多様である。&lt;/p&gt;
&lt;p&gt;Sparkと各種データソースとの連携パッケージ一覧&lt;br&gt;
&lt;a href=&#34;https://spark-packages.org/?q=tags%3A%22Data%20Sources%22&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://spark-packages.org/?q=tags%3A%22Data%20Sources%22&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上で示した多様なデータソースとの連携を可能にするパッケージ以外にも、既存のSparkエコシステムを拡張するための各種パッケージが提供されている。
このパッケージはSparkPackageとして次のサイトに掲載される。&lt;br&gt;
&lt;a href=&#34;https://spark-packages.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://spark-packages.org/&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;apache-sparkの動作環境&#34;&gt;Apache Sparkの動作環境&lt;/h2&gt;
&lt;p&gt;Sparkが動作保証しているのは、以下のようなOSである。また、実行するにはJavaがインストールされている必要がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主要Linuxディストリビューション&lt;/li&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;MacOSX&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sparkで提供されるAPIがサポートするバージョンは次のとおりである。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Java 8, 11, 17（Java 8u201未満はSpark 3.2.0では非推奨）&lt;/li&gt;
&lt;li&gt;Scala 2.12, 2.13（Spark 3.3.0は互換性のあるScala 2.12.xを使用する必要がある）&lt;/li&gt;
&lt;li&gt;Python 3.7以上（Python 3.9の場合、Apache Arrowとpandas UDFが動作しない場合がある）&lt;/li&gt;
&lt;li&gt;R 3.5以上&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;apache-sparkのライセンス形式&#34;&gt;Apache Sparkのライセンス形式&lt;/h2&gt;
&lt;p&gt;SparkはApacheのトップレベルプロジェクトの一つである。&lt;br&gt;
ライセンスはApache License 2.0であり、ユーザーはソフトウェアの使用、配布、修正、派生版の配布に制限を受けない。&lt;/p&gt;
&lt;h2 id=&#34;apache-spark参考情報&#34;&gt;Apache Spark参考情報&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://spark.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Spark公式サイト&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://spark.apache.org/docs/latest/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Spark公式ドキュメント&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.databricks.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Sparkコミュニティサイト&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Spark開発者たちが始めたDatabricksという会社によって提供されている。&lt;/p&gt;

      </description>
      
      <category>BigData</category>
      
      <category>Apache Spark</category>
      
    </item>
    
    <item>
      <title>PySparkの概念と主な機能</title>
      <link>https://www.devkuma.com/jp/docs/pyspark/</link>
      <pubDate>Fri, 06 Jan 2023 12:36:13 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/pyspark/</guid>
      <description>
        
        
        &lt;h2 id=&#34;pysparkとは&#34;&gt;PySparkとは&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://spark.apache.org/docs/latest/api/python/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PySpark&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;は、リアルタイムの大規模データ処理のためのオープンソース分散コンピューティングフレームワークおよびライブラリ群であるApache Spark向けのPython APIである。PythonやPandasのようなライブラリにすでに慣れているなら、PySparkはよりスケーラブルな分析とパイプラインを作る方法を学ぶのに適した言語である。&lt;/p&gt;
&lt;p&gt;Apache Sparkは基本的に、並列およびバッチシステムで処理することで巨大なデータセットを扱う計算エンジンである。SparkはScalaで書かれており、PySparkはSparkとPythonの連携をサポートするためにリリースされた。Spark用APIを提供するだけでなく、PySparkはPy4Jライブラリを活用してRDD（Resilient Distributed Datasets）とのインターフェースをサポートする。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/apache-spark/python-spark-pyspark.png&#34; alt=&#34;Apache SparkおよびPythonロゴ&#34;&gt;&lt;/p&gt;
&lt;p&gt;PySparkで使用される主なデータ型はSpark DataFrameである。このオブジェクトはクラスター全体に分散されたテーブルと考えることができ、RやPandasのデータフレームと似た機能を持つ。PySparkを使用して分散計算を行うには、他のPythonデータ型ではなくSpark DataFrame上で操作を実行する必要がある。&lt;/p&gt;
&lt;p&gt;PandasとSpark DataFrameの主な違いの1つは、即時実行と遅延実行である。PySparkでは、結果がパイプラインで実際に要求されるまで操作が遅延される。例えば、Amazon S3からデータセットをロードし、DataFrameに複数の変換を適用する処理を指定できるが、これらの操作はすぐには適用されない。代わりに変換グラフが記録され、データが実際に必要になったとき、例えば結果をS3へ書き戻すときに、変換が単一のパイプラインジョブとして適用される。このアプローチは、DataFrame全体をメモリへ取り込むことを防ぎ、システムクラスター全体でより効果的な処理を可能にするために使われる。Pandas DataFrameを使用すると、すべてをメモリに取り込み、すべてのPandas操作が即座に適用される。&lt;/p&gt;
&lt;h2 id=&#34;pysparkの機能とライブラリ&#34;&gt;PySparkの機能とライブラリ&lt;/h2&gt;
&lt;p&gt;Py4JはPySpark内に統合されている広く使われるライブラリで、PythonがJVM（Java Virtual Machine）オブジェクトと動的にインターフェースできるようにする。PySparkは効率的なプログラム作成のために多くのライブラリを提供する。また、以下を含む互換性のあるさまざまな外部ライブラリがある。&lt;/p&gt;
&lt;h3 id=&#34;pysparksql&#34;&gt;PySparkSQL&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://spark.apache.org/docs/2.4.0/api/python/pyspark.sql.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PySparkSQL&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;は、大容量の構造化または半構造化データにSQLに似た分析を適用するPySparkライブラリである。PySparkSQLとともにSQLクエリを使用することもできる。&lt;/p&gt;
&lt;h3 id=&#34;mllib&#34;&gt;MLlib&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://spark.apache.org/docs/latest/ml-guide.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MLlib&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;は、PySparkおよびSparkのラッパー機械学習（ML）ライブラリである。MLlibは分類、回帰、クラスタリング、協調フィルタリング、次元削減、基本的な最適化プリミティブのための多くの機械学習アルゴリズムをサポートする。&lt;/p&gt;
&lt;h3 id=&#34;graphframes&#34;&gt;GraphFrames&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://graphframes.github.io/graphframes/docs/_site/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GraphFrames&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;は、PySpark CoreおよびPySparkSQLを使用してグラフ分析を効率的に実行するための一連のAPIを提供するグラフ処理ライブラリである。高速な分散コンピューティングに最適化されている。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Pythonは知っているがScalaは知らないデータエンジニアにとって、PySparkは純粋なSparkよりはるかに使いやすいが、欠点もある。PySparkのエラーはJavaのスタックトレースエラーとPythonコードへの参照の両方を表示するため、PySparkアプリケーションのデバッグは非常に難しい場合がある。&lt;/p&gt;
&lt;p&gt;Sparkは他のデータ処理オプションより多くの処理オーバーヘッドと複雑な設定を含む。RayとDaskが最近登場した。Daskは純粋なPythonフレームワークであるため、ほとんどのデータエンジニアはすぐにDaskを使用できる。&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.databricks.com/kr/glossary/pyspark&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PySpark – Databricks&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.dominodatalab.com/data-science-dictionary/pyspark&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;What is PySpark? | Domino Data Science Dictionary&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>BigData</category>
      
      <category>Apache Spark</category>
      
      <category>PySpark</category>
      
    </item>
    
  </channel>
</rss>
