如何解决Pyspark从数字列中删除字符串或插入它们
我在数字列中有一些字符串。像1,2,3,4,'lol',6 ... 我只是想删除这些行。我该如何删除它们?
.cast
未返回NaN。我写了函数,但是花了太多时间(虚幻),反正还是行不通的...
from pyspark.sql.types import *
def is_digit(val):
try:
is_num = str(val).replace(".","",1).isdigit() if val else False
return is_num
except:
return False
is_digit_udf = F.udf(is_digit,BooleanType())
太愚蠢了:(((>
解决方法
据我了解,您想删除不包含数值的行,对吗?然后只需转换并过滤掉值即可。
df.printSchema()
df.show(10,False)
root
|-- num: string (nullable = true)
+---+
|num|
+---+
|1 |
|2 |
|3 |
|lol|
|5 |
+---+
import pyspark.sql.functions as f
df.withColumn("num",f.col("num").cast("int")) \
.filter(f.col("num").isNotNull()) \
.show(10,False)
+---+
|num|
+---+
|1 |
|2 |
|3 |
|5 |
+---+
,
使用 .rlike()
函数通过指定正则表达式过滤仅行号没有的行。
Example:
df.show()
+----+
| val|
+----+
| 1|
| 2|
| 3|
| lol|
| 6|
+----+
df.filter(col("val").rlike("[^a-zA-Z]")).show()
#or using [^\d] regex
df.filter(~col("val").rlike("[^\d]")).show()
#+---+
#|val|
#+---+
#| 1|
#| 2|
#| 3|
#| 6|
#+---+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。