提问者:小点点

火花并行化和按键分区


在斯巴克,我可以做

sc.parallelize([(0, 0), (1, 1), (0, 2), (1, 3), (0, 4), (1, 5)], 2).partitionBy(2)

但是,这首先将数据分布在集群的节点上,然后再次洗牌。当数据从驱动程序输入时,有没有办法立即按键分区?


共1个答案

匿名用户

在您提供的示例中,Spark不知道数据的分区,直到您打算通过分区ByKey()明确提及这一点。

但是如果数据已经以适当的方式组织,Spark可以利用数据的自然分区。例如,

  • 对于Spark,Parquet和HDFS有一组特定的规则,Spark DataFrames withParquet和分区
  • 对于Spark和Cassandra,您可以使用Cassandra Connector中的特定API来利用分区https://github.com/datastax/spark-cassandra-connector/blob/master/doc/3_selection.md#grouping-rows-by-partition-key
  • 等等

因此,数据、文件系统等的性质会影响Spark中的分区。