Я начал использовать Spark SQL и DataFrames в Spark 1.4.0. Я хочу определить пользовательский разделитель на DataFrames в Scala, но не вижу, как это сделать.
Одна из таблиц данных, с которыми я работаю, содержит список транзакций по учетной записи, silimar в следующем примере.
Account Date Type Amount
1001 2014-04-01 Purchase 100.00
1001 2014-04-01 Purchase 50.00
1001 2014-04-05 Purchase 70.00
1001 2014-04-01 Payment -150.00
1002 2014-04-01 Purchase 80.00
1002 2014-04-02 Purchase 22.00
1002 2014-04-04 Payment -120.00
1002 2014-04-04 Purchase 60.00
1003 2014-04-02 Purchase 210.00
1003 2014-04-03 Purchase 15.00
По крайней мере, изначально большинство расчетов будет происходить между транзакциями внутри учетной записи. Поэтому я хотел бы, чтобы данные были разделены так, чтобы все транзакции для учетной записи находились в одном и том же разделе Spark.
Но я не вижу способа определить это. Класс DataFrame имеет метод под названием "repartition (Int)", где вы можете указать количество создаваемых разделов. Но я не вижу доступных методов для определения пользовательского разделителя для DataFrame, например, для RDD.
Исходные данные хранятся в Парке. Я видел, что при написании DataFrame в Parquet вы можете указать столбец для разделения, так что я предположил, что Parquet может разбить его на столбец "Учетная запись". Но могут быть миллионы аккаунтов, и если я правильно понимаю Паркет, это создало бы отдельный каталог для каждой учетной записи, поэтому это не звучало как разумное решение.
Есть ли способ заставить Spark разбивать этот DataFrame так, чтобы все данные для учетной записи находились в одном разделе?