我有一些来自PySpark 1.5的代码,不幸的是,我不得不向后移植到Spark 1.3。我有一列包含字母数字元素,但我只想要数字。"df"的"old_col"中的元素示例如下:
'125 Bytes'
在Spark 1.5中,我能够使用
df.withColumn('new_col',F.regexp_replace('old_col','(D+)','').cast("long"))
但是,我似乎无法使用旧的 1.3 方法(如 SUBSTR 或 RLIKE)提出解决方案。原因是"字节"前面的位数在长度上会有所不同,所以我真正需要的是我在 Spark 1.3 中找不到的"替换"或"剥离"功能有什么建议吗?
只要你使用HiveContext
就可以执行相应的Hive UDF,selectExpr
:
df.selectExpr("regexp_extract(old_col,'([0-9]+)', 1)")
或使用纯 SQL:
df.registerTempTable("df")
sqlContext.sql("SELECT regexp_extract(old_col,'([0-9]+)', 1) FROM df")