如何使用pyspark识别Dataframe列中超过10+个数字的数值

klsxnrf1  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(373)

我试图从列中识别数值。我做了下面的选择来达到同样的效果。
但对于“7877177450”,它显示为非数字。根据我的场景,id也可以是带有10+个数字的数字。
如何做到这一点?

values = [('695435',),('7877177450',),('PA-098',),('asv',),('23456123',)]
df = sqlContext.createDataFrame(values,['ID',])
df.show()
df = df.withColumn("Status",F.when((col("ID").cast("int").isNotNull()) ,lit("numeric")).otherwise(lit("non-numeric")))
df.show()

+----------+
|        ID|
+----------+
|    695435|
|7877177450|
|    PA-098|
|       asv|
|  23456123|
+----------+

+----------+-----------+
|        ID|     Status|
+----------+-----------+
|    695435|    numeric|
|7877177450|non-numeric|
|    PA-098|non-numeric|
|       asv|non-numeric|
|  23456123|    numeric|
+----------+-----------+
dffbzjpn

dffbzjpn1#

你可以投给 long 取而代之的是:

df2 = df.withColumn("Status", F.when((F.col("ID").cast("long").isNotNull()), F.lit("numeric")).otherwise(F.lit("non-numeric")))
``` `int` 最大值为2147483647,因此它无法处理大于此值的值,您将得到null。
也可以使用正则表达式:

df2 = df.withColumn("Status",F.when(F.col('ID').rlike('^(\d)+$'), F.lit("numeric")).otherwise(F.lit("non-numeric")))

相关问题