2016-04-22 27 views
1

私は列を含むデータフレームを持っています。このコラムでは、私はSparkRを使用して列に特殊文字を置き換えます

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

以下のような文字列に何かを持っているしかし、私はちょうど私が

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

しかし、列以下のように、substring_indexを使用してみました、私のコラムでは、以下の値

[email protected] 
[email protected] 

が必要値は変更されません。私は別のint値でも試しました。

すべてのヘルプは本当に基本的な正規表現の使用

答えて

2

を高く評価されていますHiveContextXPath UDFを使用して

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] 

を:

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>] 

注XPathは配列を返すこと。

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

またはgetItem

withColumn(hdf, "email", getItem(xpath_email, 0L)) 
あなたは explodeことができ、個々の要素が必要な場合
関連する問題