草庐IT

scala - 我可以从 Spark 程序而不是 RDD 写入纯文本 HDFS(或本地)文件吗?

我有一个Spark程序(在Scala中)和一个SparkContext。我正在使用RDD的saveAsTextFile编写一些文件。在我的本地机器上,我可以使用本地文件路径,它与本地文件系统一起工作。在我的集群上,它适用于HDFS。我还想写入其他任意文件作为处理结果。我在我的本地机器上将它们作为常规文件写入,但希望它们进入集群上的HDFS。SparkContext似乎有一些与文件相关的方法,但它们似乎都是输入而不是输出。我该怎么做? 最佳答案 感谢marios和kostya,但是从Spark将文本文件写入HDFS只需几个步骤。//H

mongodb - Spark rdd.count() 产生不一致的结果

我有点莫名其妙。一个简单的rdd.count()在多次运行时会给出不同的结果。这是我运行的代码:valinputRdd=sc.newAPIHadoopRDD(inputConfig,classOf[com.mongodb.hadoop.MongoInputFormat],classOf[Long],classOf[org.bson.BSONObject])println(inputRdd.count())它打开到MondoDb服务器的连接并简单地计算对象。对我来说似乎很直接根据MongoDb,有3,349,495个条目这是我的spark输出,都运行同一个jar:spark1:3.257

java - 在 Spark 中计算 RDD 昂贵任务中的记录?

在Hadoop中,当我使用输入格式读取器时,作业级别的日志会报告读取了多少条记录,它还会显示字节数等。在Spark中,当我使用相同的输入格式读取器时,我得到的不是这些指标。所以我想我会使用输入格式读取器来填充rdd,然后只发布rdd中的记录数(rdd的大小)。我知道rdd.count()返回rdd的大小。但是,我不清楚使用count()的成本?例如:它是分布式函数吗?每个分区是否会报告其计数并汇总和报告计数?还是把整个rdd带进驱动里统计?执行count()后,rdd是否仍保留在内存中,还是我必须显式缓存它?有没有更好的方法来做我想做的事情,即在对记录进行操作之前对记录进行计数?

apache-spark - 当 Spark 意识到不再使用 RDD 时,它会取消持久化 RDD 本身吗?

当我们想要多次使用它时,我们可以将RDD持久化到内存和/或磁盘中。但是,我们以后是否必须自己取消持久化,或者Spark是否会进行某种垃圾收集并在不再需要RDD时取消持久化?我注意到如果我自己调用unpersist函数,我的性能会变慢。 最佳答案 是的,ApacheSpark会在RDD被垃圾回收时取消持久化。在RDD.persist你可以看到:sc.cleaner.foreach(_.registerRDDForCleanup(this))这会将对RDD的WeakReference放入ReferenceQueue中,指向Context

scala - 如何为每个分区具有相同数量元素的大小相同的分区的 Spark RDD 定义自定义分区程序?

我是Spark的新手。我有一个很大的元素[RDD]数据集,我想将它分成两个大小完全相等的分区,以保持元素的顺序。我尝试使用RangePartitioner之类的vardata=partitionedFile.partitionBy(newRangePartitioner(2,partitionedFile))这不会给出令人满意的结果,因为它粗略地划分但不完全相等,以保持元素的顺序。例如如果有64个元素,我们使用Rangepartitioner,然后分为31个元素和33个元素。我需要一个分区器,这样我就可以在一半中准确地获得前32个元素,而另一半包含第二组32个元素。你能帮我建议一下如何

scala - spark中的RDD是什么

定义说:RDDisimmutabledistributedcollectionofobjects我不太明白这是什么意思。它像存储在硬盘上的数据(分区对象)吗?如果是这样,那么RDD为什么可以有用户定义的类(例如java、scala或python)来自此链接:https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch03.html它提到:UserscreateRDDsintwoways:byloadinganexternaldataset,orbydistributingacollectio

Spark中RDD、DataFrame和DataSet的区别与联系

一、RDD、DataFrame和DataSet的定义        在开始SparkRDD与DataFrame与Dataset之间的比较之前,先让我们看一下Spark中的RDD,DataFrame和Datasets的定义:SparkRDD:RDD代表弹性分布式数据集。它是记录的只读分区集合。RDD是Spark的基本数据结构。它允许程序员以容错方式在大型集群上执行内存计算。SparkDataframe:与RDD不同,数据以列的形式组织起来,类似于关系数据库中的表。它是一个不可变的分布式数据集合。Spark中的DataFrame允许开发人员将数据结构(类型)加到分布式数据集合上,从而实现更高级别的

python - pyspark : Convert DataFrame to RDD[string]

我想将pyspark.sql.dataframe.DataFrame转换为pyspark.rdd.RDD[String]我将DataFramedf转换为RDDdata:data=df.rddtype(data)##pyspark.rdd.RDD新的RDDdata包含Rowfirst=data.first()type(first)##pyspark.sql.types.Rowdata.first()Row(_c0=u'aaa',_c1=u'bbb',_c2=u'ccc',_c3=u'ddd')我想将Row转换为String列表,如下例所示:u'aaa',u'bbb',u'ccc',u'd

python - PySpark:在 RDD 中使用对象

我目前正在学习Python,并希望将其应用到Spark上或与Spark结合使用。我有这个非常简单(且无用)的脚本:importsysfrompysparkimportSparkContextclassMyClass:def__init__(self,value):self.v=str(value)defaddValue(self,value):self.v+=str(value)defgetValue(self):returnself.vif__name__=="__main__":iflen(sys.argv)!=1:print("UsageCC")exit(-1)data=[1,2

python - 获取 Spark RDD 中每个键的最大值

返回与sparkRDD中每个唯一键关联的最大行(值)的最佳方法是什么?我使用的是python,我尝试过Mathmax,通过键和聚合进行映射和归约。有没有一种有效的方法来做到这一点?可能是UDF?我有RDD格式:[(v,3),(v,1),(v,1),(w,7),(w,1),(x,3),(y,1),(y,1),(y,2),(y,3)]我需要返回:[(v,3),(w,7),(x,3),(y,3)]关系可以返回第一个值或随机值。 最佳答案 实际上你有一个PairRDD。最好的方法之一是使用reduceByKey:(斯卡拉)valgroupe