タグ付けされた質問 「apache-spark」

Apache SparkはScalaで記述されたオープンソースの分散データ処理エンジンであり、統一されたAPIと分散データセットをユーザーに提供します。Apache Sparkの使用例は、多くの場合、機械/深層学習、グラフ処理に関連しています。


13
Spark-repartition()とcoalesce()
Learning Sparkによると データの再パーティション化はかなりコストのかかる操作であることを覚えておいてください。Sparkには、データの移動を回避できるように最適化されたバージョンのrepartition()呼び出されたバージョンもありcoalesce()ますが、RDDパーティションの数を減らしている場合のみです。 私が得る1つの違いはrepartition()、パーティションの数を増やす/減らすことができるがcoalesce()、パーティションの数を減らすことしかできないということです。 パーティションが複数のマシンに分散してcoalesce()実行されている場合、どのようにしてデータの移動を回避できますか?


12
Spark java.lang.OutOfMemoryError:Java heap space
私のクラスター:1マスター、11スレーブ、各ノードに6 GBのメモリ。 私の設定: spark.executor.memory=4g, Dspark.akka.frameSize=512 ここに問題があります: まず、HDFSからRDDにデータ(2.19 GB)を読み取ります。 val imageBundleRDD = sc.newAPIHadoopFile(...) 次に、このRDDで何かを行います。 val res = imageBundleRDD.map(data => { val desPoints = threeDReconstruction(data._2, bg) (data._1, desPoints) }) 最後に、HDFSへの出力: res.saveAsNewAPIHadoopFile(...) プログラムを実行すると、次のように表示されます。 ..... 14/01/15 21:42:27 INFO cluster.ClusterTaskSetManager: Starting task 1.0:24 as TID 33 on executor 9: Salve7.Hadoop (NODE_LOCAL) 14/01/15 21:42:27 INFO cluster.ClusterTaskSetManager: …

7
シリアライズ不可能なタスク:オブジェクトではなくクラスでのみ、クロージャーの外部で関数を呼び出すと、java.io.NotSerializableException
クロージャーの外で関数を呼び出すときに奇妙な動作をする: 関数がオブジェクト内にある場合、すべてが機能しています 関数がクラスにあるときget: シリアル化できないタスク:java.io.NotSerializableException:テスト 問題は、オブジェクトではなくクラスにコードが必要なことです。なぜこれが起こっているのか?Scalaオブジェクトはシリアル化されていますか(デフォルト?) これは実際のコード例です: object working extends App { val list = List(1,2,3) val rddList = Spark.ctx.parallelize(list) //calling function outside closure val after = rddList.map(someFunc(_)) def someFunc(a:Int) = a+1 after.collect().map(println(_)) } これは機能しない例です: object NOTworking extends App { new testing().doIT } //adding extends Serializable wont help class testing { …

2
Spark Standaloneクラスターのワーカー、エグゼキューター、コアとは何ですか?
クラスターモードの概要を読みましたが、Sparkスタンドアロンクラスターのさまざまなプロセスと並列処理をまだ理解できません。 ワーカーはJVMプロセスですか?私はを実行したbin\start-slave.shところ、ワーカー(実際にはJVM)が起動されることがわかりました。 上記のリンクのとおり、エグゼキューターは、タスクを実行するワーカーノード上のアプリケーションに対して起動されるプロセスです。executorもJVMです。 これらは私の質問です: 実行者はアプリケーションごとです。では、労働者の役割は何でしょうか?それはエグゼキューターと調整し、結果をドライバーに伝えますか?または、ドライバーはエグゼキューターに直接話しかけますか?もしそうなら、労働者の目的は何ですか? アプリケーションのエグゼキューターの数を制御するにはどうすればよいですか? エグゼキューター内でタスクを並行して実行できますか?もしそうなら、どのようにエグゼキューターのスレッド数を設定しますか? ワーカー、エグゼキューター、エグゼキューターコア(--total-executor-cores)の関係は何ですか? ノードあたりのワーカー数が増えるとはどういう意味ですか? 更新しました 例を見て理解を深めましょう。 例1: 5つのワーカーノード(各ノードに8つのコアがある)を持つスタンドアロンクラスターデフォルトの設定でアプリケーションを起動したとき。 例2例1と 同じクラスター構成ですが、次の設定でアプリケーションを実行します--executor-cores 10 --total-executor-cores 10。 例3 例1と同じクラスター構成ですが、次の設定でアプリケーションを実行します--executor-cores 10 --total-executor-cores 50。 例4 例1と同じクラスター構成ですが、次の設定でアプリケーションを実行します--executor-cores 50 --total-executor-cores 50。 例5 例1と同じクラスター構成ですが、次の設定でアプリケーションを実行します--executor-cores 50 --total-executor-cores 10。 これらの各例では、エグゼキューターは何人ですか?エグゼキューターあたりのスレッド数は?コアはいくつですか?アプリケーションごとのエグゼキューターの数はどのように決定されますか?それは常に労働者の数と同じですか?


13
Spark Dataframeで列のコンテンツ全体を表示するにはどうすればよいですか?
Spark-csvを使用してデータをDataFrameにロードしています。簡単なクエリを実行してコンテンツを表示したい: val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load("my.csv") df.registerTempTable("tasks") results = sqlContext.sql("select col from tasks"); results.show() colは切り捨てられているようです: scala> results.show(); +--------------------+ | col| +--------------------+ |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 …

13
pysparkのデータフレーム列名を変更するにはどうすればよいですか?
私はパンダの背景から来ており、CSVファイルからデータフレームにデータを読み取り、次に単純なコマンドを使用して列名を便利なものに変更することに慣れています: df.columns = new_column_name_list ただし、sqlContextを使用して作成されたpysparkデータフレームでは同じことが機能しません。これを簡単に行うために私が理解できる唯一の解決策は次のとおりです。 df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', inferschema='true', delimiter='\t').load("data.txt") oldSchema = df.schema for i,k in enumerate(oldSchema.fields): k.name = new_column_name_list[i] df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', delimiter='\t').load("data.txt", schema=oldSchema) これは基本的に変数を2回定義し、最初にスキーマを推論してから列名を変更し、更新されたスキーマでデータフレームを再度ロードします。 私たちがパンダのようにこれを行うためのより良い、より効率的な方法はありますか? 私のスパークバージョンは1.5.0です

8
Apache Spark:コアの数とエグゼキューターの数
YARNでSparkジョブを実行するときのコアの数とエグゼキューターの数の関係を理解し​​ようとしています。 テスト環境は次のとおりです。 データノードの数:3 データノードマシンの仕様: CPU:Core i7-4790(コア数:4、スレッド数:8) RAM:32GB(8GB x 4) HDD:8TB(2TB x 4) ネットワーク:1 Gb Sparkバージョン:1.0.0 Hadoopバージョン:2.4.0(Hortonworks HDP 2.1) Sparkジョブフロー:sc.textFile-> filter-> map-> filter-> mapToPair-> reduceByKey-> map-> saveAsTextFile 入力データ タイプ:単一のテキストファイル サイズ:165​​GB ライン数:454,568,833 出力 2番目のフィルター後の行数:310,640,717 結果ファイルの行数:99,848,268 結果ファイルのサイズ:41GB ジョブは次の構成で実行されました: --master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3 (データノードごとのエグゼキューター、コアと同じだけ使用) --master yarn-client --executor-memory 19G --executor-cores 4 …

20
スパークコンソールに表示されるINFOメッセージを停止する方法は?
Spark Shellで表示されるさまざまなメッセージを停止したいと思います。 log4j.propertiesこれらのメッセージを停止するためにファイルを編集しようとしました。 内容はこちら log4j.properties # Define the root logger with appender file log4j.rootCategory=WARN, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n # Settings to quiet third party logs that are too verbose log4j.logger.org.eclipse.jetty=WARN log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO しかし、メッセージはまだコンソールに表示されています。 メッセージの例をいくつか示します 15/01/05 15:11:45 INFO SparkEnv: Registering BlockManagerMaster 15/01/05 15:11:45 INFO DiskBlockManager: …

10
複数のテキストファイルを単一のRDDに読み込む方法は?
hdfsの場所から一連のテキストファイルを読み取り、sparkを使用して繰り返しマッピングします。 JavaRDD<String> records = ctx.textFile(args[1], 1); は、一度に1つのファイルのみを読み取ることができます。 複数のファイルを読み取り、それらを単一のRDDとして処理したい。どうやって?
179 apache-spark 

2
ScalaとPythonのSparkパフォーマンス
ScalaよりPythonの方が好きです。しかし、SparkはScalaでネイティブに記述されているため、明らかな理由により、コードがPythonバージョンよりもScalaで高速に実行されることを期待していました。 その前提で、1 GBのデータ用の非常に一般的ないくつかの前処理コードのScalaバージョンを学び、書くことを考えました。データはKaggleのSpringLeafコンテストから選択されます。データの概要を説明するだけです(1936のディメンションと145232の行が含まれています)。データは、int、float、string、booleanなどのさまざまなタイプで構成されます。Spark処理には8つのうち6つのコアを使用しています。そのminPartitions=6ため、すべてのコアに処理対象があるように使用しました。 Scalaコード val input = sc.textFile("train.csv", minPartitions=6) val input2 = input.mapPartitionsWithIndex { (idx, iter) => if (idx == 0) iter.drop(1) else iter } val delim1 = "\001" def separateCols(line: String): Array[String] = { val line2 = line.replaceAll("true", "1") val line3 = line2.replaceAll("false", "0") val vals: Array[String] = line3.split(",") …

5
(なぜ)RDDでキャッシュを呼び出すか、永続化する必要があるか
弾力性のある分散データセット(RDD)がテキストファイルまたはコレクション(または別のRDD)から作成された場合、RDDデータをメモリに格納するために「キャッシュ」または「永続化」を明示的に呼び出す必要がありますか?または、RDDデータはデフォルトでメモリに分散して保存されますか? val textFile = sc.textFile("/user/emp.txt") 私の理解では、上記の手順の後、textFileはRDDであり、ノードのメモリのすべてまたは一部で使用できます。 もしそうなら、なぜtextFile RDDで「キャッシュ」または「持続」を呼び出す必要があるのですか?
171 scala  apache-spark  rdd 

6
jarをSparkジョブに追加する-spark-submit
確かに...それはかなり議論されてきました。 ただし、あいまいさが多く、いくつかの回答が提供されています。jars/ executor / driver構成またはオプションでのjar参照の複製を含みます。 あいまいまたは省略された詳細 次のあいまいさに従って、不明確な、および/または省略された詳細は、各オプションについて明確にされるべきです: ClassPathへの影響 運転者 エグゼキューター(実行中のタスク用) 両方とも どういたしまして 区切り文字:コンマ、コロン、セミコロン 提供されたファイルが自動的に配布される場合 タスク(各エグゼキューターへ) リモートドライバー用(クラスターモードで実行した場合) 受け入れられるURIのタイプ:ローカルファイル、hdfs、httpなど 共通の場所にコピーした場合、その場所は(hdfs、local?) 影響を受けるオプション: --jars SparkContext.addJar(...) 方法 SparkContext.addFile(...) 方法 --conf spark.driver.extraClassPath=... または --driver-class-path ... --conf spark.driver.extraLibraryPath=...、または --driver-library-path ... --conf spark.executor.extraClassPath=... --conf spark.executor.extraLibraryPath=... 忘れないでください。spark-submitの最後のパラメーターも.jarファイルです。 メインのSparkドキュメントがどこにあるか、具体的には送信方法、使用可能なオプション、およびJavaDocについて知っています。しかし、それでも部分的には答えましたが、まだかなりの穴が残っています。 それほど複雑ではなく、誰かが私に明確で簡潔な答えを出してくれることを願っています。 ドキュメントから推測する--jarsと、SparkContext addJarとaddFileメソッドはファイルを自動的に配布するものであり、他のオプションはClassPathを変更するだけです。 簡単にするために、3つの主要なオプションを同時に使用して追加のアプリケーションjarファイルを追加できると想定しても安全でしょうか。 spark-submit --jar additional1.jar,additional2.jar \ --driver-library-path additional1.jar:additional2.jar \ …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.