使用SparkR替换列中的特殊字符

时间:2016-04-22 13:46:21

标签: r apache-spark 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值。

非常感谢任何帮助

1 个答案:

答案 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