Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SparkR dubt和断管异常_R_Apache Spark_Sparkr - Fatal编程技术网

SparkR dubt和断管异常

SparkR dubt和断管异常,r,apache-spark,sparkr,R,Apache Spark,Sparkr,嗨,我在用纱线簇的分布式模式开发SparkR 我有两个问题: 1)如果我制作了一个包含R行代码和SparkR行代码的脚本,它将只分发SparkR代码或简单的R? 这是剧本。我读了一个csv,只取了10万条第一条记录。 我清理它(使用R函数)删除NA值并创建一个SparkR数据帧 它就是这样做的:foreach Lineset获取该行集出现的每个时间间隔,并对某些属性(数值属性)求和,然后将它们全部放入一个矩阵中 这是包含R和SparkR代码的脚本。在独立模式下需要7小时,在分布式模式下需要60小

嗨,我在用纱线簇的分布式模式开发SparkR

我有两个问题:

1)如果我制作了一个包含R行代码和SparkR行代码的脚本,它将只分发SparkR代码或简单的R?

这是剧本。我读了一个csv,只取了10万条第一条记录。 我清理它(使用R函数)删除NA值并创建一个SparkR数据帧
它就是这样做的:foreach Lineset获取该行集出现的每个时间间隔,并对某些属性(数值属性)求和,然后将它们全部放入一个矩阵中

这是包含R和SparkR代码的脚本。在独立模式下需要7小时,在分布式模式下需要60小时(被
java.net.SocketException
:断管杀死)


linesSint请不要误会,但这不是一段写得特别好的代码。使用core R的效率已经很低,而将SparkR添加到等式中会使情况变得更糟

如果我制作了一个包含R行代码和SparkR行代码的脚本,它将只分发SparkR代码还是简单的R

除非您使用的是分布式数据结构和在这些结构上运行的函数,否则它只是在主服务器上的单个线程中执行的普通R代码

为什么仅仅在R中如此之快而在SparkR中如此之慢

for(i in 1:length(UniqueLineSet)){
  SubSetID<-subset.data.frame(LineSmsInt,LINESET==UniqueLineSet[i])
  for(j in 1:length(UniqueTime)){
    SubTime<-subset.data.frame(SubSetID,TimeInterval==UniqueTime[j])
    IntTemp[k,1]<-UniqueLineSet[i]
    IntTemp[k,2]<-as.numeric(UniqueTime[j])
    IntTemp[k,3]<-sum(SubTime$SmsIn,na.rm = TRUE)
    IntTemp[k,4]<-sum(SubTime$SmsOut,na.rm = TRUE)
    IntTemp[k,5]<-sum(SubTime$CallIn,na.rm = TRUE)
    IntTemp[k,6]<-sum(SubTime$CallOut,na.rm = TRUE)
    IntTemp[k,7]<-sum(SubTime$Internet,na.rm=TRUE)
    k<-k+1
  }
  print(UniqueLineSet[i])
  print(i)
}
对于初学者,您可以为
行集
UniqueTime
和列的每个组合执行单个作业。每次Spark扫描所有记录并向驱动程序获取数据时

此外,使用Spark处理可以在一台机器的内存中轻松处理的数据根本没有意义。在这种情况下运行作业的成本通常比实际处理的成本高得多

建议

如果您真的想使用SparkR,只需
groupBy
agg

group_by(Short, Short$LINESET, Short$TimeInterval) %>% agg(
  sum(Short$SmsIn), sum(Short$SmsOut), sum(Short$CallIn),
  sum(Short$CallOut), sum(Short$Internet))
如果您关心缺少(
LINESET
TimeInterval
)对,请使用
join
unionAll
填充这些对

实际上,它只需使用
数据表
并在本地聚合:

Short[, lapply(.SD, sum, na.rm=TRUE), by=.(LINESET, TimeInterval)]

谢谢。我尝试了这个差分函数(我不知道),它当然可以工作。现在很快。我是斯巴克(sparkR)的新成员。你有关于sparkR的链接吗(通过sparkR官方文档)?没有,但我不使用sparkR,所以我从来没有找过类似的东西。不过,您可以使用任何通用的Spark/SparkSQL引用。这里没有区别。我有另一个dubt,createDataFrame是集群上的分发站点吗?如果我从hdfs或简单的csv读取文件,有什么区别吗?(对于发行版,我的意思是)是的,有区别。一般来说,除了原型设计和测试之外,您可能应该避免并行本地数据结构。
Short[, lapply(.SD, sum, na.rm=TRUE), by=.(LINESET, TimeInterval)]