私はSparkで初めてです。私は2つのスパークSQlデータフレームを持っています。コードは次のようになりますApache Spark Outer Join長い時間をかけて
val df1 = sparksql.read.format(com.databricks.avro).loadfiles(filespath)
val df2 = sparksql.sql(select * from hivedb)
val df3 = df1.join(df2,df1.srcid <=> df2.srcid and df1.srccode <=> df2.srccode, left_outer)
sqlcontext.cacheastable(""table)
val insertid = sparkcontext.sql("select * from table where cid is null")
val updateid = sparkcontext.sql("select * from table where cid is not null")
この2つのdfをデータベースに保存します。
srcid
、stccode
などの約10個のフィールドと、ファーストネーム、ラストネームなどの顧客の詳細などがあります。これらのフィールドは、もともとはoracleテーブルのvarcharであった小さな文字列です。
両方のデータフレームには、約300万レコードがあります。
私たちがジョブを実行すると、Executionerは計算を完了するのに約2時間かかってしまいます。左ブロードキャストジョインとパーティション数の設定など、多くの設定を試しましたが、無駄にしました。
データが小さい(50Kファイル)場合、ジョブは6分で完了します。私はSparkのUIを見て、実行計算が始まるだけです。私たちも、死刑執行12 Gあたりのメモリを設定して、私たちは、Clouderaの5.Xのクラスタと糸でランニングにバンドルされているスパーク1.5.0を使用している20
としてそれをNUMコアを搭載した24人の処刑を与えている
。
sparkコンテキスト以外のどこで低速をデバッグできますか教えてください。
ここにコード例を追加しました。助けて欲しい。この結合を実行してデータをOracle DBに保存する必要があります –