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