Tengo una lista como esta:

List<String> dataList = new ArrayList<>();
dataList.add("A");
dataList.add("B");
dataList.add("C");

Necesito convertir Dataset<Row> dataDs = Seq(dataList).toDs();

1
Srinu Babu 13 nov. 2017 a las 13:41

2 respuestas

La mejor respuesta
List<String> data = Arrays.asList("abc", "abc", "xyz");
Dataset<String> dataDs = spark.createDataset(data, Encoders.STRING());
Dataset<String> dataListDs = spark.createDataset(dataList,    Encoders.STRING());
dataDs.show();
2
Roy 13 nov. 2017 a las 11:43

Puede convertir un List<String> en Dataset<Row> así:

  1. Obtenga un List<Object> de List<String> en cada elemento con la clase de objeto correcta. p. ej., entero, cadena, etc.

  2. Generar List<Row> a partir de List<Object>

  3. Obtenga datatypeList y headerList que desee para el esquema Dataset<Row>.

  4. Construya el objeto de esquema:

  5. Crear conjunto de datos

List<Object> data = new ArrayList();
data.add("hello");
data.add(null);

List<Row> ls = new ArrayList<Row>();
Row row = RowFactory.create(data.toArray());
ls.add(row);

List<DataType> datatype = new ArrayList<String>();
datatype.add(DataTypes.StringType);
datatype.add(DataTypes.IntegerType);
List<String> header = new ArrayList<String>();
headerList.add("Field_1_string");
headerList.add("Field_1_integer");

StructField structField1 = new StructField(headerList.get(0), datatype.get(0), true, org.apache.spark.sql.types.Metadata.empty());

StructField structField2 = new StructField(headerList.get(1), datatype.get(1), true, org.apache.spark.sql.types.Metadata.empty());
List<StructField> structFieldsList = new ArrayList<>();
structFieldsList.add(structField1);
structFieldsList.add(structField2);

StructType schema = new StructType(structFieldsList.toArray(new StructField[0]));

Dataset<Row> dataset = sparkSession.createDataFrame(ls, schema);

dataset.show();
dataset.printSchema();
1
NiharGht 6 dic. 2019 a las 08:58