2016-04-20 7 views
0

Hallo, was ich tun möchte, ist eine URL zu schneiden, so dass es alle in einem bestimmten Format ist. Im Moment sieht meine URL so aus.Sparksql Schnitt String nach Sonderposition

[https://url.com/xxxxxxx/xxxxx/xxxxxx] 

Ich will nur alles nach dem dritten schneiden/und nur meine Daten zählen, so dass ich einen Überblick, wie viel URLs ich in meinen Daten.

hoffe, dass ich mich jemand

Antwort

1

Benutzerdefinierte Funktionen (UDF) helfen kann, ist, was Sie brauchen. Angenommen, Sie haben folgende Eingabe:

case class Data(url: String) 
val urls = sqlContext.createDataFrame(Seq(Data("http://google.com/q=dfsdf"), Data("https://fb.com/gsdgsd"))) 
urls.registerTempTable("urls") 

Jetzt können Sie UDF definieren, die nur den Hostnamen aus URL bekommt:

def getHost(url: String) = url.split('/')(2) //naive implementation, for example only 
sqlContext.udf.register("getHost", getHost _) 

und erhalten Sie Ihre Daten transformiert mit SQL:

val hosts = sqlContext.sql("select getHost(url) as host from urls") 
hosts.show() 

Ergebnis:

+----------+ 
|  host| 
+----------+ 
|google.com| 
| fb.com| 
+----------+ 

I f Sie Scala DSL bevorzugen, können Sie Ihre UDF verwenden:

import org.apache.spark.sql.functions.udf 
val getHostUdf = udf(getHost _) 
val urls = urls.select(getHostUdf($"url") as "host") 

Ergebnis wird genau das gleiche.

+0

Danke funktioniert perfekt. – knox