2016-04-22 11 views
1

Ich habe ein Datenframe, das eine Spalte enthält. In dieser Spalte habe ich String so etwas wie untenErsetzen Sie Sonderzeichen in einer Spalte mit SparkR

<a href="mailto:[email protected]">[email protected]</a> 
<a href="mailto:[email protected]">[email protected]</a>… 

Aber ich brauche nur die folgenden Werte in meiner Spalte

[email protected] 
[email protected] 

ich substring_index versucht mit, wie unten

df$EMAIL_ADDR <- SparkR::substring_index(df$EMAIL_ADDR, "<", -1) 
df$EMAIL_ADDR <- SparkR::substring_index(df$EMAIL_ADDR, ">", 1) 

Aber die Säule Werte ändern sich nicht. Ich habe es auch mit anderen int-Werten versucht.

Jede Hilfe ist wirklich

geschätzt

Antwort

2

Grund Verwenden von regulären Ausdrücken:

df <- data.frame(email_addr=c(
    '<a href="mailto:[email protected]">[email protected]</a>', 
    '<a href="mailto:[email protected]">[email protected]</a>' 
)) 

sdf <- createDataFrame(sqlContext, df) 

email <- alias(regexp_extract(sdf$email_addr, "(?<=\\>)(.*)(?=\\<)", 1), "email") 

select(sdf, email) %>% head() 
##     email 
## 1   [email protected] 
## 2 [email protected] 

withColumn(sdf, "email", email) 
## DataFrame[email_addr:string, email:string] 

Mit HiveContext und 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   [email protected] 
## 2 [email protected] 


withColumn(hdf, "email", xpath_email) 
## DataFrame[email_addr:string, email:array<string>] 

Beachten Sie, dass XPath ein Array zurückgibt. Wenn Sie einzelne Elemente möchten, können Sie explode:

withColumn(hdf, "email", explode(xpath_email)) 

oder getItem:

withColumn(hdf, "email", getItem(xpath_email, 0L)) 
Verwandte Themen