我的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'))
没有效果。
请帮助。
答案 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
模块
在字符串的开头或结尾删除逗号