Импортируйте файл CSV в набор данных Spark с колонкой массивов (Java) - PullRequest
0 голосов
/ 19 марта 2020

У меня есть набор данных CSV, где один из столбцов содержит массивы. Как импортировать его в набор данных Spark в Java, используя схему, содержащую массивы?

Я пробовал следующее (где 3-й столбец является массивом):

    // Import data data
    DataType arrayType = DataTypes.createArrayType(DataTypes.StringType);

    StructType schema = DataTypes.createStructType(new StructField[] {
            DataTypes.createStructField("field1",  DataTypes.StringType, true),
            DataTypes.createStructField("field2", DataTypes.StringType, true),
            DataTypes.createStructField("field3", arrayType, false),
    });

    Dataset<Row> df = spark.read().format("csv")
            .option("sep", "\t")
            .option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")
            .option("header", "true")
            .schema(schema)
            .load(filepath);

1 Ответ

0 голосов
/ 20 марта 2020

Столбец массива, сохраненный в CSV в виде строки, может быть проанализирован в ArrayType с помощью функции «from_ json»:

val csvFileContent = Seq(
  "ID\tArrayColumn",
  "1\t['a','b']",
  "2\t['c','d']"
).toDS()

val csvFileDataFrame = spark.read.option("header", "true").option("delimiter", "\t").csv(csvFileContent.as(Encoders.STRING))

csvFileDataFrame
  .withColumn("ArrayColumn", from_json(col("ArrayColumn"), ArrayType(StringType)))

Вывод:

+---+-----------+
|ID |ArrayColumn|
+---+-----------+
|1  |[a, b]     |
|2  |[c, d]     |
+---+-----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...