将CSV文件导入带有数组列的Spark数据集(Java)



我有一个CSV数据集,其中一列包含数组。如何使用包含数组的模式将其导入Java中的Spark数据集?

我尝试了以下操作(其中第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);

数组列,以字符串形式存储在CSV中,可以通过"from_json"函数解析为ArrayType:

val csvFileContent = Seq(
"IDtArrayColumn",
"1t['a','b']",
"2t['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]     |
+---+-----------+

最新更新