2016-03-02 11 views
14

Sto usando Spark 1.3.0 e Spark Avro 1.0.0. Sto lavorando da the example on the repository page. Questo seguente codice funziona beneFiltro spark DataFrame sulla stringa contiene

val df = sqlContext.read.avro("src/test/resources/episodes.avro") 
df.filter("doctor > 5").write.avro("/tmp/output") 

Ma cosa succede se ho bisogno di vedere se la stringa doctor contiene una stringa? Dal momento che stiamo scrivendo la nostra espressione all'interno di una stringa. Cosa faccio per fare un "contiene"?

risposta

26

È possibile utilizzare contains (questo funziona con una sequenza arbitraria):

df.filter($"foo".contains("bar")) 

like (SQL come con SQL semplice espressione regolare whith _ corrispondenza un carattere arbitrario e % corrispondenza una sequenza arbitraria):

df.filter($"foo".like("bar")) 

o rlike (come con Java regular expressions):

df.filter($"foo".rlike("bar")) 

a seconda delle esigenze. LIKE e RLIKE dovrebbero funzionare anche con espressioni SQL.

+0

è il codice scala sopra? sembra che a scala non piaccia il segno $. Ho importato 'import org.apache.spark.sql.functions.lit' –

+6

Scala. Per far funzionare '$' dovrai 'importare sqlContext.implicits._'. Puoi sostituirlo con 'df (" pippo ")' o 'org.apache.spark.sql.functions.col (" pippo ")' pure. – zero323

+0

fantastico! grazie mille –

Problemi correlati