小编rak*_*ake的帖子

如何定义DataFrame的分区?

我已经开始在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,以便一个帐户的所有数据都在同一个分区?

scala partitioning dataframe apache-spark apache-spark-sql

119
推荐指数
5
解决办法
14万
查看次数

使用spark-shell时,使用sparkConf.set(..)自定义SparkContext

在Spark中,有3种主要方法可以指定SparkConf用于创建的选项SparkContext:

  1. 作为conf/spark-defaults.conf中的属性
    • 例如,行: spark.driver.memory 4g
  2. 作为火花壳或火花提交的args
    • 例如, spark-shell --driver-memory 4g ...
  3. 在源代码中,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

serialization scala kryo apache-spark

17
推荐指数
1
解决办法
4万
查看次数