web-dev-qa-db-ja.com

Spark using java

Javaでは、RowFactory.create()を使用して行を作成します。

Row row = RowFactory.create(record.getLong(1), record.getInt(2), record.getString(3));

ここで、「record」はデータベースからのレコードですが、「record」の長さが事前にわからないため、リストまたは配列を使用して「行」を作成します。 Scalaでは、Row.fromSeq()を使用してリストまたは配列から行を作成できますが、Javaでそれを実現するにはどうすればよいですか?

7
user2736706

多くの場合、実際のアプリケーションでデータセットまたはデータフレームを作成する必要があります。 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|
+-----+------------+---------+
11

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

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

Row row = RowFactory.create(mlist.toArray());   
11
abaghel

// DTOのリストを作成します

List<MyDTO> dtoList = Arrays.asList(.....));

// DTOのデータセットを作成します

Dataset<MyDTO> dtoSet = sparkSession.createDataset(dtoList,
                Encoders.bean(MyDTO.class));

//行のデータセットが必要な場合

Dataset<Row> rowSet= dtoSet .select("col1","col2","col3");
0
Sanjay Singh