2016-03-14 3 views
1
dataFrame.select(columnName).filter(myFunction(_)); 

Мне нужно отфильтровать только те записи, которые возвращают true для «myFunction»; myFunction принимает значение столбца для каждой записи и выполняет некоторый анализ значения и возвращает true или false.Spark Scala Dataframes: Фильтровать записи, которые возвращают false для функции

Что я хочу достичь, это отфильтровать значения, которые нельзя отнести к числовым данным (скажем, double). У меня есть столбец, который содержит в основном числовые данные и несколько строковых данных. Я хочу отфильтровать те значения, которые нельзя перевести в двойные.

+0

А что именно не работает Wi какой код вы используете? Каков ваш реальный вопрос? –

+0

вам понадобится карта на вашей функции. фильтр просто возьмет запись, где условие, возвращаемое myFunction, истинно – eliasah

ответ

2

Если вы отфильтровать значения, которые не могут быть отлиты в числовые данные затем отливали и падение значения NULL:

val df = sc.parallelize((1L, "0.213") :: (2L, "foo") :: (3L, "4.0") :: Nil) 
    .toDF("k", "v") 

df.withColumn("v", $"v".cast("double")).na.drop(Seq("v")) 

Если вы хотите использовать пользовательскую функцию, которую вы должны будете преобразовать данные в РДУ:

df.rdd.filter(r => ???) 

использования UDF:

df.where(udf(myFunction _)(columnName))