我正在使用Java开发一个新的Spark项目。我必须从CSV文件中读取一些数据,这些CSV有一个浮点数组,我不知道如何在我的数据集中获取此数组。
我正在读这个CSV:
CSV data image https://imgur.com/a/PdrMhev
而我正试图以这种方式获取数据:
Dataset typedTrainingData = sparkSession.sql("SELECT CAST(IDp as String) IDp, CAST(Instt as String) Instt, CAST(dataVector as String) dataVector FROM TRAINING_DATA");
我明白了:
root
|-- IDp: string (nullable = true)
|-- Instt: string (nullable = true)
|-- dataVector: string (nullable = true)
IDp | Instt | dataVector |
---|---|---|
p01 | V11apps | -0.41,-0.04,0.1.. |
p02 | V21apps | -1.50,-1.50,-1... |
正如您在架构中看到的那样,我将数组作为String读取,但我希望得到数组。建议?
我想在这个加载的数据中使用MLlib的一些机器学习算法,因此我想将数据作为数组获取。
首先定义你的架构,
StructType customStructType = new StructType();
customStructType = customStructType.add("_c0", DataTypes.StringType, false);
customStructType = customStructType.add("_c1", DataTypes.StringType, false);
customStructType = customStructType.add("_c2", DataTypes.createArrayType(DataTypes.LongType), false);
然后你可以将你的df映射到新的架构,
Dataset<Row> newDF = oldDF.map((MapFunction<Row, Row>) row -> {
String strings[] = row.getString(3).split(",");
long[] result = new long[strings.length];
for (int i = 0; i < strings.length; i++)
result[i] = Long.parseLong(strings[i]);
return RowFactory.create(row.getString(0),row.getString(1),result);
}, RowEncoder.apply(customStructType));
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。