【问题标题】:Pyspark: filter contents of array inside rowPyspark:过滤行内数组的内容
【发布时间】:2017-11-03 01:00:21
【问题描述】:

在 Pyspark 中,可以使用以下代码过滤数组:

lines.filter(lambda line: "some" in line)

但我已经从 json 文件中读取数据并对其进行标记。现在它具有以下形式:

df=[Row(text=u"i have some text", words=[u'I', u'have', u"some'", u'text'])]

如何从单词数组中过滤掉“一些”?

【问题讨论】:

    标签: arrays python-2.7 apache-spark pyspark


    【解决方案1】:

    您可以使用array_contains,它从 1.4 开始可用:

    from pyspark.sql import Row
    from pyspark.sql import functions as F
    df = sqlContext.createDataFrame([Row(text=u"i have some text", words=[u'I', u'have', u'some', u'text'])])
    
    df.withColumn("keep", F.array_contains(df.words,"some")) \
      .filter(F.col("keep")==True).show()
    # +----------------+--------------------+----+
    # |            text|               words|keep|
    # +----------------+--------------------+----+
    # |i have some text|[I, have, some, t...|true|
    # +----------------+--------------------+----+
    

    如果你想过滤掉“一些”,就像我在评论中说的,你可以使用StopWordsRemover API

    from pyspark.ml.feature import StopWordsRemover
    
    StopWordsRemover(inputCol="words", stopWords=["some"]).transform(df)
    

    【讨论】:

    • 但是如何从单词中过滤掉“一些”?
    • 您可以应用停用词删除或将其过滤掉应用 udf
    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2012-07-11
    • 1970-01-01
    相关资源
    最近更新 更多