ORC: разделение по группам значений столбцов - PullRequest
0 голосов
/ 23 января 2019

Я написал простое приложение на Java maven, которое зависит от spark-hive_2.11 для преобразования JSON в ORC.

Мои текущие разделы приложения по годам, месяцам и дням, а затем записывает каждый разделкак файл ORC, однако теперь мне нужно разделить его по годам, месяцам, дням и группировать номера счетов.

ПРИМЕЧАНИЕ. Я не работаю с HDFS, Hive, Pig и т. д. Простопростое Java-приложение, которое использует Spark Session для организации и последующего преобразования JSON-записей в файлы ORC.

В качестве примера (для простоты, предположим, что используется только годовое разделение вместо года, месяца и дня), если бы у меня былоследующие данные:

Year    Account
2009    Acct1
2009    Acct2
2009    Acct3
2009    Acct4
2009    Acct5
2009    Acct1
2009    Acct2
2009    Acct3

И я хотел бы разделить по годам и группам учетных записей (grouping 1: { Acct1, Acct2 } и grouping 2: { Acct3, Acct4, Acct5 }), я бы хотел разделы ORC, которые представляют:

Раздел 1:

Year    Account
2009    Acct1
2009    Acct2
2009    Acct1
2009    Acct2

Раздел 2:

Year    Account
2009    Acct3
2009    Acct4
2009    Acct5
2009    Acct3

Ниже приведен мой текущий код:

sparkSession.read()
    .json("jsonFile.json")
    .toDF()
    .repartition(1)
    .write()
    .options(sparkOptions)
    .partitionBy("year","month","day")
    .mode(SaveMode.Overwrite)
    .orc("orcDir");

Есть ли способ, в моем коде выше, создать группировкузначений столбцов для использования в качестве частиn ключ в дополнение к столбцам год, месяц, день?

1 Ответ

0 голосов
/ 23 января 2019

Не проверял, но вы также можете попробовать что-то вроде ниже:

val acctGroup = List(List("Acct1","Acct2"),List("Acct3","Acct4","Acct5"))

for {account <- acctGroup} 
    df.where($"account".isin(account: _*)).select("*").show()

+----+-------+
|Year|Account|
+----+-------+
|2009|  Acct1|
|2009|  Acct2|
|2009|  Acct1|
|2009|  Acct2|
+----+-------+      

+----+-------+
|Year|Account|
+----+-------+
|2009|  Acct3|
|2009|  Acct4|
|2009|  Acct5|
|2009|  Acct3|
+----+-------+  

Вы можете попробовать сохранить CSV для каждой группы:

for {account <- acctGroup} 
    df.where($"account".isin(account: _*)).select("*").write.format(......)
...