我已经开始在Spark 1.4.0中使用Spark SQL和DataFrames.我想在Scala中定义DataFrame上的自定义分区程序,但是没有看到如何执行此操作.
我正在使用的一个数据表包含一个事务列表,按帐户,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
Run Code Online (Sandbox Code Playgroud)
至少在最初,大多数计算将发生在帐户内的交易之间.所以我希望对数据进行分区,以便帐户的所有事务都在同一个Spark分区中.
但我没有看到定义这个的方法.DataFrame类有一个名为"repartition(Int)"的方法,您可以在其中指定要创建的分区数.但我没有看到任何方法可用于为DataFrame定义自定义分区程序,例如可以为RDD指定.
源数据存储在Parquet中.我确实看到在向Parquet编写DataFrame时,您可以指定要分区的列,因此我可以告诉Parquet通过"帐户"列对其数据进行分区.但是可能有数百万个帐户,如果我正确理解Parquet,它会为每个帐户创建一个独特的目录,因此这听起来不是一个合理的解决方案.
有没有办法让Spark分区这个DataFrame,以便一个帐户的所有数据都在同一个分区?
在Spark中,有3种主要方法可以指定SparkConf用于创建的选项SparkContext:
spark.driver.memory 4gspark-shell --driver-memory 4g ...SparkConf在使用它来创建实例之前配置实例SparkContext:
sparkConf.set( "spark.driver.memory", "4g" )但是,在使用时spark-shell,在获得shell提示符时,已经在名为的变量中为您创建了SparkContext sc.使用spark-shell时,如果在您有机会执行任何Scala语句之前已经创建了SparkContext,那么如何使用上面列表中的选项#3来设置配置选项?
特别是,我正在尝试使用Kyro序列化和GraphX.在GraphX中使用Kryo的规定方法是在自定义SparkConf实例时执行以下Scala语句:
GraphXUtils.registerKryoClasses( sparkConf )
Run Code Online (Sandbox Code Playgroud)
如何在跑步时完成此操作spark-shell?