【问题标题】:Removing comma in a column in pyspark在pyspark的列中删除逗号
【发布时间】:2018-04-04 12:15:47
【问题描述】:

我的 DataFrame 中有两列 first 和 Second 。两列都包含空单元格

    | **ID**    First    |Second|
    |----------|---------|------|
    |   1      |    Toys |      |
    |          |         |      |
    |--------------------|------|
    |   2      |         | Jeans| 
    |--------------------|------|
    |   3      |Jeans    |Shirt |
    -----------------------------

我使用将两列连接成一个新列

df=df.select('ID',concat(col("First"), lit(","),col("Second")).alias('ITEM'))

    |----------|----------------|
    | **ID**    **ITEM**        |
    |----------|----------------|
    |   1      |    Toys,       |
    |          |                |
    |---------------------------|
    |   2      |    ,Jeans      | 
    |---------------------------|
    |   3      |Jeans,Shirt     |
    -----------------------------

我需要删除逗号,以便计算 DataFrame 中每一行的 TF-IDF。为此,我将每行中的字符串列表根据逗号拆分为一个单词列表。

    |----------|----------------|
    | **ID**    **ITEM**        |
    |----------|----------------|
    |   1      |    [Toys, ]    |
    |          |                |
    |---------------------------|
    |   2      |   [ ,Jeans]    | 
    |---------------------------|
    |   3      |[Jeans,Shirt]   |
    -----------------------------

现在,HashingTF 将空白空间视为一个术语,这给了我一个不正确的 TF-IDF 分数。 我查看了以下链接以删除, Remove blank space from data frame column values in spark python 也试过了

df.select(regexp_replace(col("ITEM"), ",", "")).show()

删除逗号,然后我无法根据逗号进行拆分。

我也试过用udf

from pyspark.sql.functions import udf

commaRep = udf(lambda x: x.replace(',^\s+$',''))

df=df.withColumn('ITEMS',commaRep('ITEM'))

没有效果。

请帮助。

【问题讨论】:

    标签: python regex dataframe pyspark


    【解决方案1】:

    以下应该可以工作

    from pyspark.sql.functions import udf, concat, col, lit
    import re
    
    commaRep = udf(lambda x: re.sub(',$|^,','', x))
    df=df.select('ID',concat(col("First"), lit(","),col("Second")).alias('ITEM'))
    df=df.withColumn('ITEMS',commaRep('ITEM'))
    df.show(3)
    

    上述建议的主要变化是:

    • 使用re模块

    • 删除字符串开头或结尾的逗号

    【讨论】:

      【解决方案2】:

      我可以看出这是从哪里来的,但通常我们需要更多信息或更多源代码才能看到真正的问题。但是在你的代码中的某个地方是一个错位或遗漏的“”。当你的程序自我迭代它时,如果你要添加代码以返回并在添加不必要的代码之后删除这些逗号,它会被编码为添加这些逗号。

      返回您的源代码并查看填充这些区域的所有打印命令,您发现不必要的逗号或发布更多源代码以便我找到它。

      【讨论】:

      • 是的,你是对的,我使用 lit(',') 合并了两列。我已经编辑了问题。请您再看一遍。
      【解决方案3】:
      from pyspark.sql.functions import udf
      
      commaRep = udf(lambda x: x.replace(u',^\s+$',''))
      

      或

      def removefromend(x):  
                for i in [',']:  
                        if x.endswith(i):  
                                token = x.replace(i,'')  
                                return token  
               return x
      

      【讨论】:

      • 感谢您的回答。我试过了,但是没有效果。
      • 我认为这个问题是逗号和文本结尾之间没有空格
      • @abhinavchoudhury 试试这个。
      猜你喜欢
      • 2017-09-13
      • 2020-10-26
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多