Machine learning 字符串索引器,单行上的计数向量器Pypark

Machine learning 字符串索引器,单行上的计数向量器Pypark,machine-learning,pyspark,nlp,keyword-extraction,Machine Learning,Pyspark,Nlp,Keyword Extraction,嗨,我面临一个问题,即我有一行两列的单词数组 column1, column2 ["a", "b" ,"b", "c"], ["a","b", "x", "y"] 基本上,我想计算每个单词在列之间的出现次数,最终得到两个数组: [1, 2, 1, 0, 0], [1, 1, 0, 1, 1] 因此,“a”在每个数组中出现一次,“b”在第1列中出现两次,在第2列中出现一次,“c”仅在第1列中出现,“x”和“y”仅在第2列中出现。诸如此类 我试着从ml库中查看CountVectorizer函数

嗨,我面临一个问题,即我有一行两列的单词数组

column1, column2
["a", "b" ,"b", "c"], ["a","b", "x", "y"]
基本上,我想计算每个单词在列之间的出现次数,最终得到两个数组:

[1, 2, 1, 0, 0], 
[1, 1, 0, 1, 1]
因此,“a”在每个数组中出现一次,“b”在第1列中出现两次,在第2列中出现一次,“c”仅在第1列中出现,“x”和“y”仅在第2列中出现。诸如此类

我试着从ml库中查看CountVectorizer函数,但是不确定它是否行方式工作,数组在每列中可能非常大?而0值(其中一个单词出现在一列中,而另一列中没有出现)似乎没有通过


非常感谢您的帮助。

对于Spark 2.4+,您可以使用DataFrame API和内置的数组函数来实现这一点

首先,使用函数获取每行的所有单词。然后,使用函数转换单词数组,其中对于每个元素,使用和函数计算每列中出现的次数:

df = spark.createDataFrame([(["a", "b", "b", "c"], ["a", "b", "x", "y"])], ["column1", "column2"])

df.withColumn("words", array_union("column1", "column2")) \
  .withColumn("occ_column1",
              expr("transform(words, x -> size(column1) - size(array_remove(column1, x)))")) \
  .withColumn("occ_column2",
              expr("transform(words, x -> size(column2) - size(array_remove(column2, x)))")) \
  .drop("words") \
  .show(truncate=False)
输出:

+------------+------------+---------------+---------------+
|column1     |column2     |occ_column1    |occ_column2    |
+------------+------------+---------------+---------------+
|[a, b, b, c]|[a, b, x, y]|[1, 2, 1, 0, 0]|[1, 1, 0, 1, 1]|
+------------+------------+---------------+---------------+

你的spark版本是什么?hi@blackbishop想知道你是否知道SQL expr是否是内存有效的,我一直在尝试应用它,但它逐渐以非常慢的速度穿过队列末尾的作业