我试图从列中识别数值。我做了下面的选择来达到同样的效果。
但对于“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|
+----------+-----------+
1条答案
按热度按时间dffbzjpn1#
你可以投给
long
取而代之的是:df2 = df.withColumn("Status",F.when(F.col('ID').rlike('^(\d)+$'), F.lit("numeric")).otherwise(F.lit("non-numeric")))