python - 删除pyspark数据帧列中的非ascii和特殊字符

标签 python pyspark apache-spark-sql azure-databricks

我正在从大约有 50 列的 csv 文件中读取数据,其中少数列(4 到 5)包含带有非 ASCII 字符和特殊字符的文本数据。

df = spark.read.csv(path, header=True, schema=availSchema)

我正在尝试删除所有非 Ascii 字符和特殊字符并仅保留英文字符,我尝试按如下方式进行操作

df = df['textcolumn'].str.encode('ascii', 'ignore').str.decode('ascii')

我的列名称中没有空格。我收到错误

TypeError: 'Column' object is not callable
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<command-1486957561378215> in <module>
----> 1 InvFilteredDF = InvFilteredDF['SearchResultDescription'].str.encode('ascii', 'ignore').str.decode('ascii')

TypeError: 'Column' object is not callable

是否有其他方法可以实现此目的,感谢任何帮助。

最佳答案

这应该有效。

首先创建一个临时示例数据框:

df = spark.createDataFrame([
    (0, "This is Spark"),
    (1, "I wish Java could use case classes"),
    (2, "Data science is  cool"),
    (3, "This is aSA")
], ["id", "words"])

df.show()

输出

+---+--------------------+
| id|               words|
+---+--------------------+
|  0|       This is Spark|
|  1|I wish Java could...|
|  2|Data science is  ...|
|  3|      This is aSA|
+---+--------------------+

现在编写 UDF,因为您使用的那些函数无法直接在列类型上执行,您将收到 Column object not callable 错误

解决方案

from pyspark.sql.functions import udf

def ascii_ignore(x):
    return x.encode('ascii', 'ignore').decode('ascii')

ascii_udf = udf(ascii_ignore)

df.withColumn("foo", ascii_udf('words')).show()

输出

+---+--------------------+--------------------+
| id|               words|                 foo|
+---+--------------------+--------------------+
|  0|       This is Spark|       This is Spark|
|  1|I wish Java could...|I wish Java could...|
|  2|Data science is  ...|Data science is  ...|
|  3|      This is aSA|         This is aSA|
+---+--------------------+--------------------+

关于python - 删除pyspark数据帧列中的非ascii和特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59957171/

相关文章:

machine-learning - 单行上的字符串索引器、CountVectorizer Pyspark

python - Pyspark:重命名 DataFrame 列中的字典键

scala - 将映射键分解为列名

python - 使用 Python 移动最小值

python - beautifulsoup 是否有一个功能可以删除所有空格

Python (pygame) : Get image color information?

python - Django 中不同组织的管理员、用户和组

python - 使用 Direct Kafka API 运行 Spark 流应用程序所需的最佳资源是什么?

python - pyspark在某些条件下选择窗口上的第一个元素

java - 如何在不指定每一列的情况下将整行作为参数传递给 Spark (Java) 中的 UDF?