2016-07-13 11 views
1

Ich lese eine DataFrame aus einer CSV wie diese Datei:Fehler beim Filtern von Datenrahmen

val rawData = sqlContext.read 
    .format("com.databricks.spark.csv") 
    .option("header", "false") 
    .option("inferSchema", "true") 
    .load(url) 

Dann Ich versuche es durch das folgende Kriterium zu filtern: Das erste Element jeder Reihe soll ein String enthält entweder oder BBB. Dazu habe ich den Code:

val filteredData = rawData.filter(me => (me(0).toString.contains("AAA") || me(0).toString.contains("BBB"))) 

Allerdings erhalte ich diese Fehlermeldung:

Error:(104, 41) missing parameter type 
    val filteredData = rawData.filter(me => (me(0).toString.contains("AAA") || me(0).toString.contains("BBB"))) 

Was ich falsch mache?

Antwort

1

Sie müssen den Filter auf andere Weise verwenden. so etwas wie dieses versuchen:

val dataArray = Array(("AAA", 1), ("ABC", 2), ("ABCBBB", 3)) 
val rawData: DataFrame = sqlContext.createDataFrame(dataArray) 

rawData.filter(rawData("_1").contains("AAA") || rawData("_1").contains("BBB")).show() 

Das Ergebnis wird:

+------+---+ 
| _1| _2| 
+------+---+ 
| AAA| 1| 
|ABCBBB| 3| 
+------+---+ 
+0

Ich verstehe nicht, wie dieser Filter funktioniert. Sollte es nicht "rohe Daten" Element für Element nehmen? – octavian

+0

Da Sie mit 'DataFrame' arbeiten, müssen Sie definieren, was wir mit' 'Column's tun müssen (wie in SQL). Ihr Ansatz würde funktionieren, wenn Sie RDDs verwenden würden. –

Verwandte Themen