Применение преобразований с фильтром или картой, которая быстрее Scala Spark - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь выполнить некоторые преобразования в наборе данных с помощью spark, используя scala, в настоящее время использующий spark sql, но хочу перевести код на собственный код scala. я хочу знать, использовать ли фильтр или карту, выполняя некоторые операции, такие как сопоставление значений в столбце, и получить один столбец после преобразования в другой набор данных.

SELECT * FROM TABLE WHERE COLUMN = ''

Используется для написания чего-то подобного ранее в spark sql. Может кто-нибудь сказать мне альтернативный способ написать то же самое, используя карту или фильтр для набора данных, и даже какой из них намного быстрее по сравнению с ним.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Если я правильно понимаю ваш вопрос, вам нужно переписать ваш SQL-запрос в API DataFrame. Ваш запрос читает все столбцы из таблицы TABLE и фильтрует строки, где COLUMN пусто. Вы можете сделать это с DF следующим образом:

spark.read.table("TABLE")
  .where($"COLUMN".eqNullSafe(""))
  .show(10)

Производительность будет такой же, как в вашем SQL. Используйте метод dataFrame.explain(true), чтобы понять, что будет делать Spark.

0 голосов
/ 06 сентября 2018

Вы можете прочитать документацию с сайта Apache Spark. Это ссылка на документацию API на https://spark.apache.org/docs/2.3.1/api/scala/index.html#package. Вот маленький пример -

val df = sc.parallelize(Seq((1,"ABC"), (2,"DEF"), (3,"GHI"))).toDF("col1","col2")
val df1 = df.filter("col1 > 1")
df1.show()
val df2 = df1.map(x => x.getInt(0) + 3)
df2.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...