python - 打印非 Ascii 列值,python-spark
问题描述
对于 python 和 spark 来说非常新,我写了一个 udf 来删除字符串中存在的非 ascii 字符。
让它在执行操作的同时打印错误值的最有效方法是什么?(错误值将是包含非 ascii 字符的单元格)
代码:
import findspark
findspark.init()
import pyspark # only run after findspark.init()
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
import pandas as pd
sc = spark.sparkContext
from pyspark.sql.window import Window
from pyspark.sql.functions import count, col
from pyspark.sql import Row
from pyspark.sql.functions import udf
def nonasciitoascii(unicodestring):
return unicodestring.encode("ascii","ignore")
df=spark.read.csv("abc.csv")
df.show()
df.printSchema()
convertedudf = udf(nonasciitoascii)
converted = df.select('_c1','_c2').withColumn('converted',convertedudf(df._c1))
converted.show()
解决方案
一个在大多数情况下都有效的简单解决方案是为此目的运行计算:
# in python 3
def check_ascii(string):
if(not string.isascii()):
return string
else:
return None
def check_ascii_in_python_2(string):
if(not all(ord(char) < 128 for char in string)):
return string
else:
return None
all_strings_with_non_ascii_chars = df.select('_c1','_c2').withColumn('check', check_ascii(df._c1)).filter('check is not null').select('check')
all_strings_with_non_ascii_chars.show()
推荐阅读
- flutter - 如何从物理设备/生产应用程序获取错误日志
- c# - 如何在 ASP.NET MVC 中使用 C# 在 Page_Load 上设置页面事件
- flutter - 为什么单击“标题”时“onpressed”不起作用,但单击“leading”属性时起作用?
- javascript - 抱歉:另一个类型错误:无法读取未定义的属性“名称”
- java - Java BT 客户端 - 未找到对等点
- unity3d - 从元文件更改“spritePixelsToUnits”属性是否比使用“变换”选项调整纹理大小更有效?
- angular - 使用 bypassSecurityTrustResourceUrl 给 SafeValue must use [property] in result
- r - 带有 geom_raster ggplot2 的辅助轴
- python - Pip 错误:ModuleNotFoundError:没有名为“pip”的模块
- javascript - 在 React 高阶组件中传播 props