我有一个包含列的数据框。在本专栏中,我有类似下面的字符串
<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值。
非常感谢任何帮助
答案 0 :(得分:2)
使用基本正则表达式:
lambda obj: obj.type if obj.type else obj.name
使用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]
和XPath UDF:
HiveContext
请注意,XPath返回一个数组。如果您想要个别元素,可以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>]
:
explode
或withColumn(hdf, "email", explode(xpath_email))
:
getItem