SPARK SCALA Чтение файла гарантировано Последовательно [дубликат]

Я бы использовал это:

select t.*
from test as t
join
   (select max(rev) as rev
    from test
    group by id) as o
on o.rev = t.rev

Подзапрос SELECT не слишком эффективен, но в предложении JOIN кажется полезным. Я не эксперт в оптимизации запросов, но я пробовал в MySQL, PostgreSQL, FireBird, и он работает очень хорошо.

Вы можете использовать эту схему в нескольких соединениях и с предложением WHERE. Это мой рабочий пример (решение идентично вашей задаче с таблицей «твердое»):

select *
from platnosci as p
join firmy as f
on p.id_rel_firmy = f.id_rel
join (select max(id_obj) as id_obj
      from firmy
      group by id_rel) as o
on o.id_obj = f.id_obj and p.od > '2014-03-01'

Его спрашивают на таблицах с подростками таких записей записей, и он занимает менее 0,01 секунды на самом деле не слишком сильная машина.

Я бы не использовал пункт IN (как упоминается выше). IN предоставляется для использования с короткими списками констант, а не как фильтр запросов, построенный на подзапросе. Это связано с тем, что подзапрос в IN выполняется для каждой отсканированной записи, которая может сделать запрос очень медленным.

3
задан AHAD 3 July 2015 в 19:10
поделиться

2 ответа

zipWithIndex - это то, что вам нужно здесь. Он отображает от RDD[T] до RDD[(T, Long)] путем добавления индекса во вторую позицию пары.

sample1
   .zipWithIndex()
   .map { case (line, i) => i.toString + ", " + line }

или с использованием строковой интерполяции (см. комментарий @ DanielC.Sobral)

sample1
    .zipWithIndex()
    .map { case (line, i) => s"$i, $line" }
5
ответ дан zero323 27 August 2018 в 09:12
поделиться

Вызывая val sample1 = sc.textFile("data.txt"), вы создаете новый RDD .

Если вам нужно только выход , вы можете попробовать использовать следующий код:

sample1.zipWithIndex().foreach(f => println(f._2 + ", " + f._1))

В основном, используя этот код, вы сделаете это:

  1. Используя .zipWithIndex() вернет новый RDD[(T, Long)], где (T, Long) является Tuple , T является предыдущим типом данных элементов RDD (java.lang.String, я считаю), а Long является индексом элемента в RDD.
  2. Вы выполнили преобразование, теперь вам нужно сделать действие. foreach, в этом случае , очень хорошо подходит. Что в основном делает: он применяет ваше утверждение к каждому элементу в текущем RDD, поэтому мы просто вызываем быстро отформатированный println.
2
ответ дан SuppieRK 27 August 2018 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: