2016-12-04 5 views
1

別のカスタムJavaクラスのスキーマからStructTypeを作成しています。このクラスから、列名とデータ型を抽出できます。Spark SQLのStructTypeの作成:addメソッドまたはコンストラクタを使用しますか?

私が知っていることから、StructTypeを構築するための2つの方法があるように、それはそうです:

  1. 使用add method
  2. 使用私は基本的にを通じてIループので、両方の方法を使用することができますconstructor passing in an array of StructField

フィールドを1つずつ抽出するカスタムスキーマクラス。問題は、addメソッドは、呼び出すたびに新しいStructTypeを作成するように見えるので、これを処理するために不必要に複雑な方法だと思われるので、実際にそれが本当にかどうか疑問に思っています。新しいオブジェクトを呼び出すたびにを作成します。そうでない場合、私はaddを考え出しあなたはStructTypeクラスのソースコードをチェックする場合は、そのメソッドが追加表示されますStructField

答えて

2

の新しいのArrayListを作成するより良い方法はnew StructFieldStructTypeコンストラクタを呼び出しているので、新しいStructTypeを作成します。

def add(name: String, dataType: DataType): StructType = { 
    StructType(fields :+ new StructField(name, dataType, nullable = true, Metadata.empty)) 
} 

以下のサンプルプログラムを使用して確認できます。

public class QuickTest { 
public static void main(String[] args) { 
    SparkSession sparkSession = SparkSession 
      .builder() 
      .appName("QuickTest") 
      .master("local[*]") 
      .getOrCreate(); 
    //StructType 
    StructType st1 = new StructType().add("name", DataTypes.StringType); 
    System.out.println("hashCode "+st1.hashCode()); 
    System.out.println("structType "+st1.toString()); 

    //add 
    st1.add("age", DataTypes.IntegerType); 
    System.out.println("hashCode "+st1.hashCode()); 
    System.out.println("structType "+st1.toString()); 

    //add and assign 
    StructType st2 = st1.add("age", DataTypes.IntegerType); 
    System.out.println("hashCode "+st2.hashCode()); 
    System.out.println("structType "+st2.toString()); 

    //constructor 
    StructType st3 = new StructType(new StructField[] {new StructField("name", DataTypes.StringType, true, null), new StructField("age", DataTypes.IntegerType, true, null)}); 
    System.out.println("hashCode "+st3.hashCode()); 
    System.out.println("structType "+st3.toString()); 
    } 
} 
+0

彼らはそれが不変StructTypeを維持するために、新しいオブジェクト –

+1

を作成しなくても、それを実装するために非常に簡単ですようにそれはそうするので、新しいオブジェクトを毎回作成することを決めた私はなぜだろうか。 – abaghel

+0

ああ、私は参照してください。関数型プログラミングに準拠するには? –

関連する問題