我有一个关于RDD中默认分区的问题。
case class Animal(id:Int, name:String)
val myRDD = session.sparkContext.parallelize( (Array( Animal(1, "Lion"), Animal(2,"Elephant"), Animal(3,"Jaguar"), Animal(4,"Tiger"), Animal(5, "Chetah") ) ))
Console println myRDD.getNumPartitions
myRDD.foreachPartition( e => { println("----------"); e.foreach(println) } )
----------
----------
----------
----------
----------
----------
----------
----------
----------
----------
----------
----------
Animal(2,Elephant)
Animal(4,Tiger)
Animal(3,Jaguar)
Animal(5,Chetah)
Animal(1,Lion)
我不知道为什么会这样。你能帮忙吗。
谢了!
我不认为这意味着您的所有数据都在最后一个分区中。相反,由于foreachpartition
是并行执行的,所以在打印值之前,可能已经从所有执行器打印了虚线。打印行的顺序并不表示执行的顺序。
如果您尝试下面的代码(源代码),您可以看到数据在执行器之间被均匀地分区(至少在我的机器上是这样):
myRDD.mapPartitionsWithIndex((index, itr) => itr.toList.map(x => x + "#" + index).iterator).collect
// res6: Array[String] = Array(Animal(1,Lion)#1, Animal(2,Elephant)#2, Animal(3,Jaguar)#3, Animal(4,Tiger)#4, Animal(5,Chetah)#5)
我通过指定分区的数量从文本文件创建RDD。但它给我的分区数与指定的分区数不同。 文件 /home/pvikash/data/test.txt的内容是: 我试图理解为什么这里的分区数量在变化,如果我们有小数据(可以容纳一个分区),那么为什么spark会创建空分区? 任何解释都将不胜感激。
...等 但是,默认情况下,Spark会加载jar文件:/usr/lib/Spark/jars/guice-3.0.jar,其中包含com.google.inject.internal.injectorImpl,这个类也在我的超级jar中的Guice-4.x jar中。当我的服务启动时,这将导致。 我尝试在中设置一些Spark conf,将super jar放在类路径中,希望在Spark加载gui
问题内容: 我在Elasticsearch上遇到问题,我不希望对索引项进行分析。但是elasticsearch有一些默认设置,可以在空间上标记它。因此,我的方面查询未返回我想要的结果。 我读到索引类型的属性应该工作。但是问题是我事先不知道我的文档结构。我会在不知道表结构的情况下将随机MySQL数据库索引到elasticsearch。 我如何设置elasticsearch,使其默认情况下会一直使用,
我不小心把我的本地主推到gitlab上的一个分支,现在它是默认的。有没有办法重命名这个分支或设置一个新的主分支为主?
背景: Centos7 Hadoop-2.7.3 spark-2.0.1-bin-hadoop2.7 apache-hive-2.1.0-bin(仅用于启动由配置单元启动的转移服务--service转移服务) 配置了HADOOP_HOME、SPARK_HOME和HIVE_HOME等 MySQL 5.7.16 已将mysql-connector-java-5.1.40-bin.jar放入hive/l
改变分片的默认分配方式 在前面的章节中,我们学习了很多关于分片的知识以及与之相关的特性。我们也讨论了shard allocation的工作方式(本章的调整集群的分片分配一节)。然而除了默认的分配方式,我们并没有探讨其它的内容。ElasticSearch提供了更多的分片分配策略来构建先进的系统。在本节,我们将更深入地了解在分片分配方面,我们还能做哪些事情。 ShardAllocator介绍 Shar