我可以用 SQL 语句指定并行度吗?
Can I specify the degree of parallelism with SQL statement?
我很喜欢使用 Spark sql,但之前遇到了一个问题。
由于每个分区的 RDD 大小限制,Spark sql 吐出以下错误消息; (INT_MAX).
16/03/03 15:41:20 INFO TaskSetManager: Lost task 142.2 in stage 4.0 (TID 929) on executor 10.1.100.116: java.lang.RuntimeException (java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:828)
at org.apache.spark.storage.DiskStore$$anonfun$getBytes.apply(DiskStore.scala:125)
at org.apache.spark.storage.DiskStore$$anonfun$getBytes.apply(DiskStore.scala:113)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1206)
at org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala:127)
所以我想增加每个RDD的分区数来解决这个问题。我可以在 Spark sql 中调整它们吗?
为什么要增加分区数?
通常(并且经常)Spark 会根据您的集群(或本地计算机)特性选择合适数量的分区。
如果你看here:"Normally, Spark tries to set the number of partitions automatically based on your cluster. However, you can also set it manually..."
根据我的个人经验,增加数量并不总是会提高处理效率,除非你的数据集很小(它适合机器的内存)并且机器可用处理新分区的空闲内核。
关于你的问题,有一个名为spark.default.parallelism
的配置属性你可以设置它来控制并行度,你可以找到它here, and here你可以找到关于关于决定分区数量的默认 Spark 行为。
手动设置分区数可能很棘手且不灵活(您必须确保在不同机器或集群上执行应用程序时调整此数字)。
我很喜欢使用 Spark sql,但之前遇到了一个问题。 由于每个分区的 RDD 大小限制,Spark sql 吐出以下错误消息; (INT_MAX).
16/03/03 15:41:20 INFO TaskSetManager: Lost task 142.2 in stage 4.0 (TID 929) on executor 10.1.100.116: java.lang.RuntimeException (java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:828)
at org.apache.spark.storage.DiskStore$$anonfun$getBytes.apply(DiskStore.scala:125)
at org.apache.spark.storage.DiskStore$$anonfun$getBytes.apply(DiskStore.scala:113)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1206)
at org.apache.spark.storage.DiskStore.getBytes(DiskStore.scala:127)
所以我想增加每个RDD的分区数来解决这个问题。我可以在 Spark sql 中调整它们吗?
为什么要增加分区数? 通常(并且经常)Spark 会根据您的集群(或本地计算机)特性选择合适数量的分区。
如果你看here:"Normally, Spark tries to set the number of partitions automatically based on your cluster. However, you can also set it manually..."
根据我的个人经验,增加数量并不总是会提高处理效率,除非你的数据集很小(它适合机器的内存)并且机器可用处理新分区的空闲内核。
关于你的问题,有一个名为spark.default.parallelism
的配置属性你可以设置它来控制并行度,你可以找到它here, and here你可以找到关于关于决定分区数量的默认 Spark 行为。
手动设置分区数可能很棘手且不灵活(您必须确保在不同机器或集群上执行应用程序时调整此数字)。