Вы можете сделать это, по крайней мере, для фильтрации, если вы готовы использовать запрос языка интегрированы.
Для файла данных dates.txt, содержащий:
one,2014-06-01
two,2014-07-01
three,2014-08-01
four,2014-08-15
five,2014-09-15
Вы можете упаковать как много Scala даты магии в вашей UDF, как вы хотите, но я буду держать это просто:
def myDateFilter(date: String) = date contains "-08-"
Set все это выглядит следующим образом: это много от Programming guide.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext._
// case class for your records
case class Entry(name: String, when: String)
// read and parse the data
val entries = sc.textFile("dates.txt").map(_.split(",")).map(e => Entry(e(0),e(1)))
Вы можете использовать UDF как часть вашего ИНЕКЕ:
val augustEntries = entries.where('when)(myDateFilter).select('name, 'when)
и увидеть результаты:
augustEntries.map(r => r(0)).collect().foreach(println)
Обратите внимание на версию метода where
я использовал, в документе указано следующее:
def where[T1](arg1: Symbol)(udf: (T1) ⇒ Boolean): SchemaRDD
Итак, UDF может принимать только один аргумент, но вы можете составить несколько вызовов .where()
для фильтрации по нескольким столбцам.
Edit для Спарк 1.2.0 (и на самом деле 1.1.0 тоже)
Хотя это на самом деле не документированы, Спарк теперь поддерживает регистрации UDF, так что может быть запрошена от SQL.
выше UDF может быть зарегистрирован с помощью:
sqlContext.registerFunction("myDateFilter", myDateFilter)
и если таблица была зарегистрирована
sqlContext.registerRDDAsTable(entries, "entries")
это может быть запрошена с помощью
sqlContext.sql("SELECT * FROM entries WHERE myDateFilter(when)")
Для получения дополнительной информации см this example.
Они говорят на [официальный сайт] (https://spark.apache.org/ docs/latest/sql-programming-guide.html), что Spark SQL по-прежнему является альфа-вещью, которая [по-видимому, не имеет официальной ссылки на синтаксис] (http://apache-spark-user-list.1001560.n3.nabble.com /Supported-SQL-syntax-in-Spark-SQL-td9538.html) на данный момент. Люди, которые действительно знают что-то о Spark SQL *, могут здесь повсюду, но на данный момент у вас может быть больше шансов узнать о нем новые вещи после списка рассылки Apache Spark (http: // apache-spark-user-list. 1001560.n3.nabble.com/). –