Apache spark Spark数据集:数据集的强制转换列
这是我的数据集:Apache spark Spark数据集:数据集的强制转换列,apache-spark,dataset,Apache Spark,Dataset,这是我的数据集: Dataset<Row> myResult = pot.select(col("number") , col("document") , explode(col("mask")).as("mask")); 我的问题是:文档属于column类型,我需要将其转换为不同的对象类型,并对其进行解析以提取名称、年龄和类别。我该怎么做呢。文档是xml,我需要进行解析以获取其他3列,因此无法避免
Dataset<Row> myResult = pot.select(col("number")
, col("document")
, explode(col("mask")).as("mask"));
我的问题是:文档属于column类型,我需要将其转换为不同的对象类型,并对其进行解析以提取名称、年龄和类别。我该怎么做呢。文档是xml,我需要进行解析以获取其他3列,因此无法避免将其转换为xml。将
extract
方法转换为xml将是一个尽可能接近您要求的解决方案。UDF可以获取一个或多个列的值,并使用此输入执行任何逻辑
import org.apache.spark.sql.expressions.UserDefinedFunction;
导入org.apache.spark.sql.types.DataTypes;
导入静态org.apache.spark.sql.functions.col;
导入静态org.apache.spark.sql.functions.udf;
[...]
UserDefinedFunction extract=udf(
(字符串文档)->{
列表结果=新建ArrayList();
XMLParser doc=XMLParser.parse(文档);
字符串名称=…//从xml文档读取名称
字符串年龄=…//从xml文档读取年龄
String clazz=…//从xml文档读取类
结果。添加(名称);
结果:添加(年龄);
结果。添加(clazz);
返回结果;
},DataTypes.createArrayType(DataTypes.StringType)
);
UDF的一个限制是它们只能返回一列。因此,该函数返回一个字符串数组,该数组必须在以后解压缩
数据集myResultNew=myResult
.withColumn(“extract”,extract.apply(col(“document”))//1
.withColumn(“name”,col(“extract”).getItem(0))//2
.withColumn(“age”,col(“extract”).getItem(1))//2
.withColumn(“class”,col(“extract”).getItem(2))//2
.删除(“文件”、“摘录”)//3.
apply
函数的参数 Dataset<Row> myResultNew = myResult.select(col("number")
, col("name")
, col("age")
, col("class")
, col("mask");
myResult.select(extract(col("document")));
private String extract(final Column document) {
//TODO ADD A NEW COLUMN nam, age, class TO THE NEW DATASET.
// PARSE DOCUMENT AND GET THEM.
XMLParser doc= (XMLParser) document // this doesnt work???????
}