2016-09-26 7 views
5

を使用してスパークで一覧またはArrayから行を作成するために、私はRowFactory.createは()の行を作成するために使用します。はどのように、JavaではJavaの

「レコードは」データベースからレコードをある
Row row = RowFactory.create(record.getLong(1), record.getInt(2), record.getString(3)); 

、しかし、私は事前に "レコード"の長さを知ることができないので、私はリストまたは配列を使用して "行"を作成したい。 Scalaでは、Row.fromSeq()を使用してリストまたは配列から行を作成できますが、Javaでどのように実現できますか?

答えて

8

質問が正しく出るかどうかはわかりませんが、RowFactoryを使用してJavaのArrayListからRowを作成できます。

List<MyData> mlist = new ArrayList<MyData>(); 
    mlist.add(d1); 
    mlist.add(d2); 

Row row = RowFactory.create(mlist.toArray()); 
+0

こんにちは、私は、オブジェクト全体としてスパークについてのmlistが見つかりました: '行の行= RowFactory .create(mlist); ' ' System.out.println( "行番号:" + row.length()); ' ' System.out.println( "mlist番号:" + mlist.size() ); ' 私には: 行番号:1 mlist番号:2 – user2736706

+0

はい、しかし行には両方のレコードがあります。 System.out.println( "行番号:" + row.toSeq())を印刷してみてください。 – abaghel

+0

こんにちは、ありがとう! これを試すことができます: オブジェクト[] rowArray = {obj1、obj2、....} 行行= RowFactory.create(rowArray);System.out.println( "行番号:" + row.length()); あなたは行番号を取得します:6 – user2736706

2

実際のアプリケーションでは、データセットまたはデータフレームを作成する必要があります。ここで、Javaアプリケーションの行とデータセットを作成する方法の例である:私はあなたの方法を使用する場合

// initialize first SQLContext 
SQLContext sqlContext = ... 
StructType schemata = DataTypes.createStructType(
     new StructField[]{ 
       createStructField("NAME", StringType, false), 
       createStructField("STRING_VALUE", StringType, false), 
       createStructField("NUM_VALUE", IntegerType, false), 
     }); 
Row r1 = RowFactory.create("name1", "value1", 1); 
Row r2 = RowFactory.create("name2", "value2", 2); 
List<Row> rowList = ImmutableList.of(r1, r2); 
Dataset<Row> data = sqlContext.createDataFrame(rowList, schemata); 
+-----+------------+---------+ 
| NAME|STRING_VALUE|NUM_VALUE| 
+-----+------------+---------+ 
|name1|  value1|  1| 
|name2|  value2|  2| 
+-----+------------+---------+