首页 文章

删除pyspark中列中的逗号

提问于
浏览
0

我的DataFrame中有两列第一列和第二列 . 两列都包含空单元格

| **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'))

这没有效果 .

请帮助 .

3 回答

  • 0

    以下应该有效

    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 模块

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

  • 0

    我可以看看它来自哪里,但通常我们需要更多信息或更多的源代码来查看真正的问题 . 但是你的代码中的某个地方是错位的或者是遗漏的 . “当你的程序自我迭代时,如果你要添加代码以便在添加不必要的代码之后删除那些逗号,则编码添加这些逗号 .

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

  • 0
    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
    

相关问题