我在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类有一个名为'repartition(Int)‘的方法,您可以在其中指定要创建的分区数量。但是我没有看到任何可用于为DataFrame定义自定义分区程序的方法,例如可以为RDD指定的方法。
源数据存储在Parquet中。我确实看到,在向DataFrame写入帐户时,您可以指定一个用于分区的列,因此我可以告诉Parquet按“Account”列对其数据进行分区。但是可能有数百万个帐号,如果我没理解错的话,它会为每个帐号创建一个不同的目录,所以这听起来不是一个合理的解决方案。
有没有办法让Spark对这个DataFrame进行分区,以便一个帐户的所有数据都在同一个分区中?
https://stackoverflow.com/questions/30995699
复制相似问题