使用 SparkR 替换列中的特殊字符
Replace special characters in a column using SparkR
我有一个包含一列的数据框。在本专栏中,我有如下所示的字符串
<a href="mailto:NO@EMAIL.COM">NO@EMAIL.COM</a>
<a href="mailto:MICAHELBAHOU@YAHO">MICAHELSAM@YAHOO.COM</a>…
但我的专栏中只需要以下值
NO@EMAIL.COM
MICAHELSAM@YAHOO.COM
我尝试使用 substring_index,如下所示
df$EMAIL_ADDR <- SparkR::substring_index(df$EMAIL_ADDR, "<", -1)
df$EMAIL_ADDR <- SparkR::substring_index(df$EMAIL_ADDR, ">", 1)
但是列值没有改变。我也尝试了不同的 int 值。
非常感谢任何帮助
使用基本正则表达式:
df <- data.frame(email_addr=c(
'<a href="mailto:NO@EMAIL.COM">NO@EMAIL.COM</a>',
'<a href="mailto:MICAHELBAHOU@YAHO">MICAHELSAM@YAHOO.COM</a>'
))
sdf <- createDataFrame(sqlContext, df)
email <- alias(regexp_extract(sdf$email_addr, "(?<=\>)(.*)(?=\<)", 1), "email")
select(sdf, email) %>% head()
## email
## 1 NO@EMAIL.COM
## 2 MICAHELSAM@YAHOO.COM
withColumn(sdf, "email", email)
## DataFrame[email_addr:string, email:string]
使用 HiveContext
和 XPath UDF:
hiveContext <- sparkRHive.init(sc)
hdf <- createDataFrame(hiveContext, df)
xpath_email <- alias(expr("xpath(email_addr, '/a/text()')"), "email")
select(hdf, xpath_email) %>% head()
## email
## 1 NO@EMAIL.COM
## 2 MICAHELSAM@YAHOO.COM
withColumn(hdf, "email", xpath_email)
## DataFrame[email_addr:string, email:array<string>]
请注意,XPath returns 是一个数组。如果你想要单独的元素,你可以 explode
:
withColumn(hdf, "email", explode(xpath_email))
或getItem
:
withColumn(hdf, "email", getItem(xpath_email, 0L))
我有一个包含一列的数据框。在本专栏中,我有如下所示的字符串
<a href="mailto:NO@EMAIL.COM">NO@EMAIL.COM</a>
<a href="mailto:MICAHELBAHOU@YAHO">MICAHELSAM@YAHOO.COM</a>…
但我的专栏中只需要以下值
NO@EMAIL.COM
MICAHELSAM@YAHOO.COM
我尝试使用 substring_index,如下所示
df$EMAIL_ADDR <- SparkR::substring_index(df$EMAIL_ADDR, "<", -1)
df$EMAIL_ADDR <- SparkR::substring_index(df$EMAIL_ADDR, ">", 1)
但是列值没有改变。我也尝试了不同的 int 值。
非常感谢任何帮助
使用基本正则表达式:
df <- data.frame(email_addr=c(
'<a href="mailto:NO@EMAIL.COM">NO@EMAIL.COM</a>',
'<a href="mailto:MICAHELBAHOU@YAHO">MICAHELSAM@YAHOO.COM</a>'
))
sdf <- createDataFrame(sqlContext, df)
email <- alias(regexp_extract(sdf$email_addr, "(?<=\>)(.*)(?=\<)", 1), "email")
select(sdf, email) %>% head()
## email
## 1 NO@EMAIL.COM
## 2 MICAHELSAM@YAHOO.COM
withColumn(sdf, "email", email)
## DataFrame[email_addr:string, email:string]
使用 HiveContext
和 XPath UDF:
hiveContext <- sparkRHive.init(sc)
hdf <- createDataFrame(hiveContext, df)
xpath_email <- alias(expr("xpath(email_addr, '/a/text()')"), "email")
select(hdf, xpath_email) %>% head()
## email
## 1 NO@EMAIL.COM
## 2 MICAHELSAM@YAHOO.COM
withColumn(hdf, "email", xpath_email)
## DataFrame[email_addr:string, email:array<string>]
请注意,XPath returns 是一个数组。如果你想要单独的元素,你可以 explode
:
withColumn(hdf, "email", explode(xpath_email))
或getItem
:
withColumn(hdf, "email", getItem(xpath_email, 0L))