我有一个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] |
+---+-----------+