如何检查pyspark数据框中的字符串列是否全部为数字

新手上路,请多包涵

我有一个 PySpark Dataframe 有一列 strings 。如何检查其中的哪些行是数字。我在 PySpark 的 官方文档 中找不到任何功能。

 values = [('25q36',),('75647',),('13864',),('8758K',),('07645',)]
df = sqlContext.createDataFrame(values,['ID',])
df.show()
+-----+
|   ID|
+-----+
|25q36|
|75647|
|13864|
|8758K|
|07645|
+-----+

In Python, there is a function .isDigit() which returns True or False if the string contains just numbers or not.

预期的数据帧:

 +-----+-------+
|   ID| Value |
+-----+-------+
|25q36| False |
|75647| True  |
|13864| True  |
|8758K| False |
|07645| True  |
+-----+-------+

我想避免创建 UDF

原文由 cph_sto 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

一个简单的演员就可以完成这项工作:

 from pyspark.sql import functions as F

my_df.select(
  "ID",
  F.col("ID").cast("int").isNotNull().alias("Value ")
).show()

+-----+------+
|   ID|Value |
+-----+------+
|25q36| false|
|75647|  true|
|13864|  true|
|8758K| false|
|07645|  true|
+-----+------+

原文由 Steven 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用正则表达式过滤

事实上,我很喜欢 Steven 提供的创造性解决方案,但对于这种情况,这是我更简单的建议:

 df.filter(~df.ID.rlike('\D+')).show()

首先,您选择包含带有 rlike('\D+') 的非数字字符的每一行,然后在过滤器的开头排除带有 ~ 的那些行。

原文由 Mohammad-Reza Malekpour 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题