2016-12-19 6 views
1

これは愚かな質問のように思われる場合は申し訳ありません。他の誰かのSparkアプリケーションのための非常に単純なString処理関数を書く必要がありますが、Sparkの経験は限られています。私はちょうどそれをJavaで書いてjarファイルを提供できると言われました。火花のJava JARを書く

デザインがどのように見えるのかちょっと混乱していますか?メソッドを含む標準クラス(Spark固有のコードなし)を作成すればうまくいくでしょうか? jarをインポートした後、(Scala)Sparkアプリケーションからこれをどのように初期化/呼び出しますか?

+0

カスタムJava関数を記述し、それをSpark UDFとして登録することができます。または、Spark DataFrameまたはDataSetで何らかの処理を行う関数を記述することもできます。 UDFなしで既存のSpark DataFrame関数を使用することができれば、おそらくこれが望ましい方法です。 – clay

答えて

0

Sparkの詳細を追加する必要はありません(Sparkクラスを使用する必要がない限り)。次に例を示します。

[email protected]:~> cat MyClass.java 
public class MyClass 
{ 
    public static int add(int x, int y) 
    { 
     return x + y; 
    } 
} 
[email protected]:~> javac MyClass.java 
[email protected]:~> jar cvf MyJar.jar MyClass.class 
added manifest 
adding: MyClass.class(in = 244) (out= 192)(deflated 21%) 
[email protected]:~> spark --jars ./MyJar.jar 
Welcome to 
     ____    __ 
    /__/__ ___ _____/ /__ 
    _\ \/ _ \/ _ `/ __/ '_/ 
    /___/ .__/\_,_/_/ /_/\_\ version 2.0.1 
     /_/ 

Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_111) 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> MyClass.add(2,3) 
res0: Int = 5 

この場合、Scalaはそう何スカラ/ Javaの相互運用性の考慮事項はありませんでしたプリミティブのJava intとしてscala.Intを使用することができました。関数によっては、これについて考える必要があるかもしれませんが、それはSparkの問題ではなくScala-Javaの問題です。

+0

ありがとう、これは私が探していたものです! –

+0

いくつかの冗長な処理を避けるために静的メソッドを使用するのではなく、Sparkでオブジェクトを使用する方法はありますか? –

+0

Scalaで任意のJava構造を使用することができますので、Javaコードを書いておけばSpark Devで使用できるようになります。コレクションのようなことに気をつけて、変換を許可する必要があります –