我已经开始在 Spark 1.4.0中使用 Spark SQL 和 DataFrames。我想用 Scala 在 DataFrames 上定义一个自定义分区程序,但是没有看到如何做到这一点。
我正在使用的一个数据表包含按帐户分列的事务列表,类似于下面的示例。
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 类有一个名为“ rePartitionInt”的方法,您可以在该方法中指定要创建的分区数。但是我没有看到任何可用的方法来为 DataFrame 定义自定义分区程序,比如可以为 RDD 指定自定义分区程序。
源数据存储在 Parquet。我确实看到,在向 Parquet 编写 DataFrame 时,您可以指定一个列来进行分区,因此可以假设我可以告诉 Parquet 通过“ Account”列来对数据进行分区。但是可能有数百万个账户,如果我理解正确的话,Parquet 会为每个账户创建一个不同的目录,所以这听起来不像是一个合理的解决方案。
有没有办法让 Spark 对这个 DataFrame 进行分区,以便 Account 的所有数据都在同一个分区中?