小编Car*_*ter的帖子

地图无法在scala中序列化?

我是Scala的新手.为什么"map"函数不可序列化?如何使其可序列化?例如,如果我的代码如下所示:

val data = sc.parallelize(List(1,4,3,5,2,3,5))

def myfunc(iter: Iterator[Int]) : Iterator[Int] = {
  val lst = List(("a", 1),("b", 2),("c",3), ("a",2))
  var res = List[Int]()
  while (iter.hasNext) {
    val cur = iter.next
    val a = lst.groupBy(x => x._1).mapValues(_.size)
    //val b= a.map(x => x._2)
    res = res ::: List(cur)
  }
  res.iterator
}

data.mapPartitions(myfunc).collect
Run Code Online (Sandbox Code Playgroud)

如果我取消注释该行

val b= a.map(x => x._2)
Run Code Online (Sandbox Code Playgroud)

代码返回一个异常:

org.apache.spark.SparkException: Task not serializable
Caused by: java.io.NotSerializableException: scala.collection.immutable.MapLike$$anon$2
Serialization stack:
    - object not serializable (class: scala.collection.immutable.MapLike$$anon$2, value: Map(1 -> 3))
    - field (class: …
Run Code Online (Sandbox Code Playgroud)

serialization scala apache-spark

27
推荐指数
2
解决办法
1万
查看次数

如何在Spark RDD中获取具有精确样本大小的样本?

为什么rdd.sample()Spark RDD 上的函数返回不同数量的元素,即使fraction参数相同?例如,如果我的代码如下所示:

val a = sc.parallelize(1 to 10000, 3)
a.sample(false, 0.1).count
Run Code Online (Sandbox Code Playgroud)

每次我运行代码的第二行时,它返回一个不等于1000的不同数字.实际上我希望每次看到1000,尽管1000个元素可能不同.谁能告诉我如何获得样本大小恰好等于1000的样本?非常感谢你.

sample apache-spark rdd

15
推荐指数
1
解决办法
2万
查看次数

如何从Scala列表或数组中随机抽样?

我想从Scala列表或数组(不是RDD)中随机抽样,样本大小可能比列表或数组的长度长得多,我该如何有效地做到这一点?因为样本量可能非常大,并且需要在很多次进行采样(在不同的列表/数组上).

我知道对于Spark RDD,我们可以使用takeSample()来实现它,是否有Scala列表/数组的等价物?

非常感谢你.

arrays scala sample list apache-spark

15
推荐指数
2
解决办法
1万
查看次数

如何使用dplyr对列进行范围分组?

我想根据列的范围值对data.table进行分组,如何使用dplyr库执行此操作?

例如,我的数据表如下所示:

library(data.table)
library(dplyr)
DT <- data.table(A=1:100, B=runif(100), Amount=runif(100, 0, 100))
Run Code Online (Sandbox Code Playgroud)

现在我想将DT分组为B组0.05间隔的20组,并计算每组中的行数.例如,列B值在[0,0.05]范围内的任何行将形成一个组; 列B值在[0.05,0.1]范围内的任何行将形成另一个组,依此类推.有没有一种有效的方法来完成这个群组功能?

非常感谢你.

-----------------------------关于akrun答案的更多问题.谢谢akrun的回答.我有一个关于"剪切"功能的新问题.如果我的DT如下:

DT <- data.table(A=1:10, B=c(0.01, 0.04, 0.06, 0.09, 0.1, 0.13, 0.14, 0.15, 0.17, 0.71)) 
Run Code Online (Sandbox Code Playgroud)

使用以下代码:

DT %>% 
  group_by(gr=cut(B, breaks= seq(0, 1, by = 0.05), right=F) ) %>% 
  summarise(n= n()) %>%
  arrange(as.numeric(gr))
Run Code Online (Sandbox Code Playgroud)

我希望看到这样的结果:

          gr n
1   [0,0.05) 2
2 [0.05,0.1) 2
3 [0.1,0.15) 3
4 [0.15,0.2) 2
5 [0.7,0.75) 1
Run Code Online (Sandbox Code Playgroud)

但我得到的结果是这样的:

          gr n
1   [0,0.05) 2
2 [0.05,0.1) 2
3 [0.1,0.15) 4
4 [0.15,0.2) 1 …
Run Code Online (Sandbox Code Playgroud)

grouping r dplyr

9
推荐指数
1
解决办法
1万
查看次数

如何向Spark RDD添加新列?

我有一个RDD MANY列(例如,几百个),我怎么在这个RDD的末尾添加一个多列?

例如,如果我的RDD如下所示:

    123, 523, 534, ..., 893
    536, 98, 1623, ..., 98472
    537, 89, 83640, ..., 9265
    7297, 98364, 9, ..., 735
    ......
    29, 94, 956, ..., 758
Run Code Online (Sandbox Code Playgroud)

如何向其中添加一列,其值是第二列和第三列的总和?

非常感谢你.

apache-spark rdd

8
推荐指数
2
解决办法
1万
查看次数

如何使用dplyr获得两列的平均值?

如何使用dplyr获取数据表的两列平均值?例如,如果我的数据如下所示:

dt <- data.table(A=1:5, B=c(1,4,NA,6,8))
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列"Avg",它是每行的A列和B列的平均值:

dt %>% mutate(Avg=mean(c(A, B), na.rm=T))
Run Code Online (Sandbox Code Playgroud)

但是这段代码并没有给我正确的结果.这该怎么做?非常感谢你.

r mean dplyr

7
推荐指数
2
解决办法
9350
查看次数

如何在Spark Scala中使用5个元素对元组的RDD进行排序?

如果我有一个带有5个元素的元组的RDD,例如RDD(Double,String,Int,Double,Double)

如何使用第五个元素有效地对此RDD进行排序?

我试图将这个RDD映射到键值对并使用sortByKey,但看起来sortByKey非常慢,它比我收集这个RDD慢,并且在收集的数组上使用了sortWith.为什么会这样?

非常感谢你.

sorting scala apache-spark rdd

6
推荐指数
1
解决办法
5345
查看次数

使用条形图时如何在网格线上绘制条形图?

我在grid()里面使用barplot().因为我希望将条形图绘制在网格的顶部,所以我使用了panel.first参数.但是,网格线与y轴的刻度不匹配.谁能告诉我如何解决这个问题?我的代码如下,谢谢.

WRE <- c(1423, 41721)

bp <- barplot(WRE, xaxt = 'n', xlab = '', yaxt = 'n', las = 3, width = 0.5,
              space = 1.5, main = paste("How You Compare", sep = ""), ylab = "",  
              names.arg = NA, col = c("red","blue"), cex.lab = 1, 
              panel.first = grid(nx = NA, ny = NULL))

axis(1, at=bp, labels=c("Average Claims", "Your Claims"),
     tick=FALSE, las=1, line=-1, cex.axis=1) 
axis(2, at=axTicks(2), sprintf("$%s", formatC(axTicks(2), digits=9, big.mark=",", width=-1)),
     cex.axis=0.9, las=2)
Run Code Online (Sandbox Code Playgroud)

r bar-chart r-grid

5
推荐指数
1
解决办法
5378
查看次数

如何总结Scala数组的每一列?

如果我在Scala中有一个数组数组(类似于矩阵),那么总结矩阵的每一列的有效方法是什么?例如,如果我的数组数组如下所示:

val arr =  Array(Array(1, 100, ...), Array(2, 200, ...), Array(3, 300, ...))
Run Code Online (Sandbox Code Playgroud)

我想总结每一列(例如,总结所有子数组的第一个元素,总结所有子数组的第二个元素等)并得到一个新的数组,如下所示:

newArr = Array(6, 600, ...)
Run Code Online (Sandbox Code Playgroud)

如何在Spark Scala中有效地完成此操作?

arrays scala

5
推荐指数
2
解决办法
3512
查看次数

如何格式化Shiny renderTable?

我在Shiny中使用renderTable来显示数据集,并且我想对表格进行一些格式化。例如,如果我的代码如下所示:

ui.R:

shinyUI(fluidPage(
  titlePanel("Hello Shiny!"),
  fluidRow(  
    column(4,
     ... ...
      )       
    ),
    column(8,
      tableOutput("mydata")
    )
  )
))
Run Code Online (Sandbox Code Playgroud)

server.R:

shinyServer(function(input, output) {
df <- data.frame(A=1:10, B=11:20)
output$mydata <- renderTable(df)
})
Run Code Online (Sandbox Code Playgroud)

此示例仅显示一个非常基本的表。如果我想将表格宽度设置为列宽度的100%,而A列占据表格宽度的70%并向左对齐,则B列占据表格宽度的30%并向右对齐,并且列名的背景色设置为蓝色,如何使用renderTable实现呢?非常感谢您的帮助。

顺便说一句,我可以参考关于renderTable格式设置的任何文档吗?

formatting r shiny

4
推荐指数
1
解决办法
1万
查看次数

将data.table列分配给R中的变量

我在R中分配data.table列有一个问题.我的示例代码如下所示:

library(data.table)
DT <- data.table(A=c(3,5,2,6,4), B=c(6,2,7,2,1), Amount=1:5)
setkey(DT, A)
amt <- DT$Amount 
amt #3 1 5 2 4
setkey(DT, B)
amt #5 2 4 1 3
Run Code Online (Sandbox Code Playgroud)

我使用"$"符号将data.table的列分配给变量"amt",但看起来在我更改了data.table的顺序之后,"amt"的顺序也被更改了.谁能告诉我为什么会这样?我怎样才能避免这种情况的发生(当我改变DT的顺序时,我不希望改变"amt"的顺序)?

非常感谢你.

r variable-assignment data.table

3
推荐指数
1
解决办法
5492
查看次数

如何使用dplyr获取每个组的最佳案例?

我有一个包含3列的数据表:ID,Type和Count.对于每个ID,我希望在此ID中获得具有前2个Count的Type,并将结果展平为一行.例如,如果我的数据表如下所示:

ID   Type   Count
A    1      8
B    1      3
A    2      5
A    3      2
B    2      1
B    3      4
Run Code Online (Sandbox Code Playgroud)

然后我希望我的输出是两行,如下所示:

ID   Top1Type   Top1TypeCount  Top2Type   Top2TypeCount
A    1          8              2          5
B    3          4              1          3
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何使用R中的dplyr库实现这一目标?非常感谢你.

r dplyr

2
推荐指数
1
解决办法
1085
查看次数

如何总结Scala数组的每个n元素?

什么是在Scala中总结数组的每个n元素的有效方法?例如,如果我的数组如下所示:

val arr = Array(3,1,9,2,5,8,...)
Run Code Online (Sandbox Code Playgroud)

我想总结这个数组的每3个元素并得到一个新的数组,如下所示:

newArr = Array(13, 15, ...)
Run Code Online (Sandbox Code Playgroud)

如何在Spark Scala中有效地完成此操作?非常感谢你.

arrays scala sum

0
推荐指数
1
解决办法
1483
查看次数