【发布时间】:2017-09-18 15:04:16
【问题描述】:
我是 Spark 的新手,我想使用 Dataset 类从文本文件中提取特征(基本上是字数)。我已经阅读了关于 Spark 的 "Extracting, transforming and selecting features" 教程,但报告的每个示例都从定义为“即时”的一组单词开始。我曾多次尝试从文本文件开始生成相同类型的数据集,但我总是失败。这是我的代码:
SparkSession spark = SparkSession
.builder()
.appName("Simple application")
.config("spark.master", "local")
.getOrCreate();
Dataset<String> textFile = spark.read()
.textFile("myFile.txt")
.as(Encoders.STRING());
Dataset<Row> words = textFile.flatMap(s -> {
return Arrays.asList(s.toLowerCase().split("AG")).iterator();
}, Encoders.STRING()).filter(s -> !s.isEmpty()).toDF();
Word2Vec word2Vec = new Word2Vec()
.setInputCol("value")
.setOutputCol("result")
.setVectorSize(16)
.setMinCount(0);
Word2VecModel model = word2Vec.fit(words);
Dataset<Row> result = model.transform(words);
我收到此错误消息:Exception in thread "main" java.lang.IllegalArgumentException: requirement failed: Column value must be of type equal to one of the following types: [ArrayType(StringType,true), ArrayType(StringType,false)] but was actually of type StringType.
我想我必须使用类似的东西将每一行转换为一行:
RowFactory.create(0.0, line)
但我不知道该怎么做。
基本上,我试图根据从长字符序列生成的字符串的字数来训练分类系统。我的文本文件每行包含一个序列,因此我需要对每一行进行拆分和计数(子字符串称为 k-mers,可以在 here 找到一般描述)。根据 k-mers 的长度,我可能有超过 4^32 个不同的字符串,所以我一直在寻找像 Spark 这样的可扩展机器学习算法。
【问题讨论】:
-
能否请您添加文本文件的完整堆栈和内容。
标签: java apache-spark word-count