Spark 1.3 Dataframe 中的 Strip 或 Regex 函数

Strip or Regex function in Spark 1.3 Dataframe

我有一些来自 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"))

但是,我似乎无法使用 SUBSTR 或 RLIKE 等旧的 1.3 方法提出解决方案。原因是 "Bytes" 前面的位数长度会有所不同,所以我真正需要的是我在 Spark 1.3 中找不到的 'replace' 或 'strip' 功能 有什么建议吗?

只要你使用HiveContext你就可以通过selectExpr:

执行相应的Hive UDFs
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")