删除pyspark中列中的逗号

时间:2017-10-23 20:31:26

标签: python regex dataframe pyspark

我的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 :(得分:0)

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

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

答案 1 :(得分: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

答案 2 :(得分: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模块

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