【问题标题】:Why does Spark MLlib HashingTF output only 1D Vectors?为什么 Spark MLlib HashingTF 只输出一维向量?
【发布时间】:2017-02-02 10:00:13
【问题描述】:

所以我有这个格式的大数据框:

数据框:org.apache.spark.sql.DataFrame = [id: string, data: string]

数据是一组非常大的单词/标识符。它还包含我需要清理的不必要的符号,例如 ["{ 等。

我的清理解决方案是:

val dataframe2 = sqlContext.createDataFrame(dataframe.map(x=> Row(x.getString(0), x.getAs[String](1).replaceAll("[^a-zA-Z,_:]",""))), dataframe.schema)

我需要将 ML 应用于这些数据,因此它应该像这样进入管道。

  1. 第一次标记,它给出了

org.apache.spark.sql.DataFrame = [id: string, data: string, tokenized_data: array<string>]

有输出(没有data 列)

[id1,WrappedArray(ab,abc,nuj,bzu...)]

  1. 停用词删除

org.apache.spark.sql.DataFrame = [id: string, data: string, tokenized_data: array<string>, newData: array<string>]

带输出(不带datatokenized_data

[id1,WrappedArray(ab,abc,nuj,bzu...)]

  1. HashingTF

org.apache.spark.sql.DataFrame = [id: string, data: string, tokenized_data: array<string>, newData: array<string>, hashedData: vector]

矢量看起来像这样:

[id1,(262144,[236355],[1.0])]
[id2,(262144,[152325],[1.0])]
[id3,(262144,[27653],[1.0])]
[id4,(262144,[199400],[1.0])]
[id5,(262144,[82931],[1.0])]

作为先前算法的结果创建的每个数组总体上可以包含从 0 到几十个特征。然而几乎所有/大部分我的向量都是一维的。我想对这些数据进行一些聚类,但一维是一个大问题。为什么会发生这种情况,我该如何解决?

我发现错误正是在我清理数据时发生的。如果我不进行清理,HashingTF 会正常执行。我在清理中做错了什么?如何在不弄乱格式的情况下执行类似的清理?

【问题讨论】:

    标签: scala apache-spark dataframe apache-spark-mllib apache-spark-ml


    【解决方案1】:

    [^a-zA-Z,_:] 匹配所有空格。它产生一个连续的字符串,当标记化时会创建一个标记和一个带有一个条目的Vector。您应该排除空格或使用正则表达式标记器作为替换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2018-02-27
      • 2015-07-13
      • 2016-05-14
      • 1970-01-01
      • 2017-12-11
      • 2018-09-19
      相关资源
      最近更新 更多