Questions tagged «apache-spark»

Apache Spark是用Scala编写的开源分布式数据处理引擎,为用户提供了统一的API和分布式数据集。Apache Spark的用例通常与机器/深度学习,图处理有关。


13
Spark-Repartition()与Coalesce()
根据Learning Spark 请记住,对数据重新分区是一项相当昂贵的操作。Spark还具有repartition()称为的优化版本,coalesce()可以避免数据移动,但前提是要减少RDD分区的数量。 我得到的一个区别是repartition()分区数可以增加/减少,但是coalesce()分区数只能减少。 如果分区分布在多台计算机上并coalesce()运行,那么如何避免数据移动?


12
Spark java.lang.OutOfMemoryError:Java堆空间
我的集群:1个主机,11个从机,每个节点有6 GB内存。 我的设置: spark.executor.memory=4g, Dspark.akka.frameSize=512 这是问题所在: 首先,我从HDFS到RDD读取了一些数据(2.19 GB): val imageBundleRDD = sc.newAPIHadoopFile(...) 其次,在此RDD上执行以下操作: val res = imageBundleRDD.map(data => { val desPoints = threeDReconstruction(data._2, bg) (data._1, desPoints) }) 最后,输出到HDFS: res.saveAsNewAPIHadoopFile(...) 当我运行程序时,它显示: ..... 14/01/15 21:42:27 INFO cluster.ClusterTaskSetManager: Starting task 1.0:24 as TID 33 on executor 9: Salve7.Hadoop (NODE_LOCAL) 14/01/15 21:42:27 INFO cluster.ClusterTaskSetManager: …

7
任务不可序列化:仅在类而非对象上调用闭包外的函数时,java.io.NotSerializableException
在闭包之外调用函数时出现奇怪的行为: 当函数在对象中时,一切正常 当函数在类中时,get: 任务不可序列化:java.io.NotSerializableException:测试 问题是我需要在类而不是对象中的代码。知道为什么会这样吗?Scala对象是否已序列化(默认值?)? 这是一个工作代码示例: object working extends App { val list = List(1,2,3) val rddList = Spark.ctx.parallelize(list) //calling function outside closure val after = rddList.map(someFunc(_)) def someFunc(a:Int) = a+1 after.collect().map(println(_)) } 这是不起作用的示例: object NOTworking extends App { new testing().doIT } //adding extends Serializable wont help class testing { …

2
什么是Spark Standalone集群中的工作者,执行者,核心?
我阅读了《集群模式概述》,但仍然无法理解Spark Standalone集群中的不同进程和并行性。 工作者是不是JVM进程?我运行bin\start-slave.sh,发现它产生了工作程序,该工作程序实际上是一个JVM。 按照上面的链接,执行程序是为运行任务的工作程序节点上的应用程序启动的进程。执行者也是JVM。 这些是我的问题: 执行器是每个应用程序。那么,工人的角色是什么?它是否与执行程序协调并将结果传达给驱动程序?还是驾驶员直接与执行者对话?如果是这样,那么工人的目的是什么? 如何控制应用程序的执行者数量? 可以使任务在执行程序内部并行运行吗?如果是这样,如何配置执行程序的线程数? 工作者,执行者和执行者核心(--total-executor-cores)之间是什么关系? 每个节点上有更多工人意味着什么? 更新 让我们以例子来更好地理解。 示例1: 具有5个工作节点(每个节点具有8个核心)的独立群集当我使用默认设置启动应用程序时。 示例2 与示例1相同的群集配置,但是我运行具有以下设置的应用程序--executor-cores 10 --total-executor-cores 10。 示例3 与示例1相同的群集配置,但是我运行具有以下设置的应用程序--executor-cores 10 --total-executor-cores 50。 示例4 与示例1相同的群集配置,但是我运行具有以下设置的应用程序--executor-cores 50 --total-executor-cores 50。 示例5 与示例1相同的群集配置,但是我运行具有以下设置的应用程序--executor-cores 50 --total-executor-cores 10。 在每个示例中,有多少执行者?每个执行程序有多少个线程?多少个核心?如何确定每个申请的执行人数量?它总是与工人人数相同吗?


13
如何在Spark Dataframe中显示完整的列内容?
我正在使用spark-csv将数据加载到DataFrame中。我想做一个简单的查询并显示内容: val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load("my.csv") df.registerTempTable("tasks") results = sqlContext.sql("select col from tasks"); results.show() 上校似乎被截断了: scala> results.show(); +--------------------+ | col| +--------------------+ |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 07:15:...| |2015-11-16 …

13
如何在pyspark中更改数据框列名称?
我来自熊猫背景,习惯于将CSV文件中的数据读取到数据帧中,然后使用简单的命令将列名更改为有用的东西: df.columns = new_column_name_list 但是,这在使用sqlContext创建的pyspark数据帧中无效。我能想到的唯一解决方案是: df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', inferschema='true', delimiter='\t').load("data.txt") oldSchema = df.schema for i,k in enumerate(oldSchema.fields): k.name = new_column_name_list[i] df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', delimiter='\t').load("data.txt", schema=oldSchema) 这基本上是两次定义变量,然后首先推断模式,然后重命名列名,然后使用更新后的模式再次加载数据框。 有没有像我们在大熊猫中那样做的更好,更有效的方法? 我的Spark版本是1.5.0

8
Apache Spark:内核数量与执行程序数量
我试图了解在YARN上运行Spark作业时内核数与执行程序数之间的关系。 测试环境如下: 数据节点数:3 数据节点机器规格: CPU:Core i7-4790(内核数:4,线程数:8) 内存:32GB(8GB x 4) 硬盘:8TB(2TB x 4) 网络:1Gb Spark版本:1.0.0 Hadoop版本:2.4.0(Hortonworks HDP 2.1) Spark作业流程:sc.textFile->过滤器->映射->过滤器-> mapToPair-> reduceByKey->映射-> saveAsTextFile 输入数据 类型:单个文本文件 大小:165GB 线数:454,568,833 输出量 第二个过滤器之后的行数:310,640,717 结果文件的行数:99,848,268 结果文件的大小:41GB 该作业使用以下配置运行: --master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3 (每个数据节点的执行程序,使用的内核数最多) --master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3 (减少的内核数) --master yarn-client …

2
Scala与Python的Spark性能
与Scala相比,我更喜欢Python。但是,由于Spark是用Scala原生编写的,出于明显的原因,我期望我的代码在Scala中的运行速度比Python版本快。 基于这个假设,我想学习和编写一些非常通用的预处理代码的Scala版本,用于大约1 GB的数据。数据选自Kaggle的SpringLeaf竞赛。只是为了概述数据(它包含1936个维度和145232行)。数据由各种类型组成,例如int,float,string,boolean。我正在使用8个内核中的6个进行Spark处理;minPartitions=6因此,我使用了每个内核都要处理的东西。 Scala代码 val input = sc.textFile("train.csv", minPartitions=6) val input2 = input.mapPartitionsWithIndex { (idx, iter) => if (idx == 0) iter.drop(1) else iter } val delim1 = "\001" def separateCols(line: String): Array[String] = { val line2 = line.replaceAll("true", "1") val line3 = line2.replaceAll("false", "0") val vals: Array[String] = line3.split(",") …

1
如何停止Spark控制台上显示的INFO消息?
我想停止Spark Shell上出现的各种消息。 我试图编辑log4j.properties文件以停止这些消息。 这是内容 log4j.properties # Define the root logger with appender file log4j.rootCategory=WARN, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n # Settings to quiet third party logs that are too verbose log4j.logger.org.eclipse.jetty=WARN log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO 但是消息仍在控制台上显示。 这是一些示例消息 15/01/05 15:11:45 INFO SparkEnv: Registering BlockManagerMaster 15/01/05 15:11:45 INFO DiskBlockManager: …

10
如何将多个文本文件读入单个RDD?
我想从hdfs位置读取一堆文本文件,并使用spark在迭代中对其执行映射。 JavaRDD<String> records = ctx.textFile(args[1], 1); 一次只能读取一个文件。 我想读取多个文件并将它们作为单个RDD处理。怎么样?
178 apache-spark 

5
(为什么)我们需要调用缓存还是坚持使用RDD
从文本文件或集合(或另一个RDD)创建弹性分布式数据集(RDD)时,我们是否需要显式调用“缓存”或“持久”以将RDD数据存储到内存中?还是默认情况下,RDD数据是否以分布式方式存储在内存中? val textFile = sc.textFile("/user/emp.txt") 根据我的理解,在完成上述步骤之后,textFile是一个RDD,并且在节点的所有/某些内存中都可用。 如果是这样,为什么我们需要在textFile RDD上调用“缓存”或“持久”呢?
171 scala  apache-spark  rdd 

6
将罐子添加到Spark Job-spark-submit
没错,已经讨论了很多。 但是,存在很多歧义和提供的一些答案...包括在jars / executor / driver配置或选项中复制jar引用。 模棱两可和/或省略的细节 含糊不清之后,应为每个选项澄清不清楚和/或省略的细节: ClassPath如何受到影响 司机 执行器(用于正在运行的任务) 都 一点也不 分隔字符:逗号,冒号,分号 如果提供的文件自动分发 用于任务(针对每个执行者) 用于远程驱动程序(如果以群集模式运行) 接受的URI类型:本地文件,hdfs,http等 如果复制到公共位置,则该位置在哪里(hdfs,本地?) 影响的选项: --jars SparkContext.addJar(...) 方法 SparkContext.addFile(...) 方法 --conf spark.driver.extraClassPath=... 要么 --driver-class-path ... --conf spark.driver.extraLibraryPath=..., 要么 --driver-library-path ... --conf spark.executor.extraClassPath=... --conf spark.executor.extraLibraryPath=... 不要忘记,spark-submit的最后一个参数也是.jar文件。 我知道在哪里可以找到主要的spark文档,尤其是有关如何提交,可用的选项以及JavaDoc的信息。但是,这仍然给我留下了很多空白,尽管它也可以部分解决。 我希望这不是那么复杂,并且有人可以给我一个清晰简洁的答案。 如果我从文档中猜测,似乎--jars和SparkContext addJar和addFile方法都是将自动分发文件的方法,而其他选项仅修改了ClassPath。 为了简单起见,可以安全地假设我可以同时使用3个主要选项添加其他应用程序jar文件: spark-submit --jar additional1.jar,additional2.jar \ --driver-library-path …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.