2017-01-09 4 views
0

String型とmllib.linalg.Vector型の2つのDataframe列に対応する2つの引数を入力として取り、Tuple2を返すUDF2が必要です。これは実践ですか?はいの場合、このudf()をどのように登録すればよいですか?Tuple2をApacheのspark UDF(java形式)から返すことはできますか?

hiveContext.udf().register("getItemData", get_item_data, WHAT GOES HERE FOR RETURN TYPE?); 

UDFは次のように定義されています

UDF2<String, org.apache.spark.mllib.linalg.Vector, Tuple2<String, org.apache.spark.mllib.linalg.Vector>> get_item_data = 
      (String id, org.apache.spark.mllib.linalg.Vector features) -> { 
     return new Tuple2<>(id, features); 
    }; 

答えて

1

次のように定義することができますschemaをそこに行く:

import org.apache.spark.sql.types.DataType; 
import org.apache.spark.sql.types.DataTypes; 
import org.apache.spark.mllib.linalg.VectorUDT; 

List<StructField> fields = new ArrayList<>(); 
fields.add(DataTypes.createStructField("id", DataTypes.StringType, false)); 
fields.add(DataTypes.createStructField("features", new VectorUDT(), false)); 
DataType schema = DataTypes.createStructType(fields); 

しかし、あなたが必要とするすべてはどんなことなく、ただstructある場合追加の処理org.apache.spark.sql.functions.structは、このトリックを行う必要があります。

df.select(struct(col("id"), col("features")); 
関連する問題