如果我使用dplyr语法在上面的数据表,做我得到的数据表中的所有速度优势,同时仍然使用dplyr的语法?换句话说,如果我使用dplyr语法查询数据表,是否会误用数据表?或者我是否需要使用纯数据表语法来利用它的所有功能.
提前感谢任何建议.代码示例:
library(data.table)
library(dplyr)
diamondsDT <- data.table(ggplot2::diamonds)
setkey(diamondsDT, cut) 
diamondsDT %>%
    filter(cut != "Fair") %>%
    group_by(cut) %>%
    summarize(AvgPrice = mean(price),
                 MedianPrice = as.numeric(median(price)),
                 Count = n()) %>%
    arrange(desc(Count))
Run Code Online (Sandbox Code Playgroud)
结果:
#         cut AvgPrice MedianPrice Count
# 1     Ideal 3457.542      1810.0 21551
# 2   Premium 4584.258      3185.0 13791
# 3 Very Good 3981.760      2648.0 12082
# 4      Good 3928.864      3050.5  4906
Run Code Online (Sandbox Code Playgroud)
这是我想出的数据表等价.不确定它是否符合DT良好做法.但我想知道代码是否比场景背后的dplyr语法更有效:
diamondsDT [cut != "Fair"
        ] [, .(AvgPrice = mean(price),
                 MedianPrice = as.numeric(median(price)),
                 Count = .N), by=cut …Run Code Online (Sandbox Code Playgroud) 尝试使用spark-shell读取位于S3中的文件:
scala> val myRdd = sc.textFile("s3n://myBucket/myFile1.log")
lyrics: org.apache.spark.rdd.RDD[String] = s3n://myBucket/myFile1.log MappedRDD[55] at textFile at <console>:12
scala> myRdd.count
java.io.IOException: No FileSystem for scheme: s3n
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2607)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2614)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
    ... etc ...
Run Code Online (Sandbox Code Playgroud)
该IOException异常:没有文件系统的方案:S3N与发生错误:
这个错误的原因是什么?缺少依赖,缺少配置或误用sc.textFile()?
或者可能是因为这个帖子似乎暗示了影响Hadoop 2.60特有的Spark构建的错误.我将尝试Spark for Hadoop 2.40,看看这是否解决了这个问题.
在datatable上还有其他关于行方式运算符的帖子.它们太简单或者解决了特定的场景
我的问题更通用.有一个使用dplyr的解决方案.我玩过但未能找到使用data.table语法的等效解决方案.您能否建议一个优雅的data.table解决方案,它可以重现与dplyr版本相同的结果?
编辑1:真实数据集上建议的解决方案的基准汇总(10MB,73000行,24个数字列上的统计数据).基准测试结果是主观的.但是,经过的时间始终可以重复.
| Solution By | Speed compared to dplyr     |
|-------------|-----------------------------|
| Metrics v1  |  4.3 times SLOWER (use .SD) |
| Metrics v2  |  5.6 times FASTER           |
| ExperimenteR| 15   times FASTER           |
| Arun v1     |  3   times FASTER (Map func)|
| Arun v2     |  3   times FASTER (foo func)|
| Ista        |  4.5 times FASTER           |
Run Code Online (Sandbox Code Playgroud)
编辑2:我在第二天添加了NACount列.这就是为什么在各个贡献者建议的解决方案中找不到该列的原因.
数据设置
library(data.table)
dt <- data.table(ProductName = c("Lettuce", "Beetroot", "Spinach", "Kale", "Carrot"),
    Country …Run Code Online (Sandbox Code Playgroud) 使用ScalaTest 3.0.0 环境:Scala 2.11.8,sbt 0.13.5,IntelliJ 14.1.4
build.sbt只有
// NOTE: not using org.scalactic
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test"
Run Code Online (Sandbox Code Playgroud)
下面的测试通过了.但是,IntelliJ在MyMiniTest下面标记了一条波浪形的红线,并带有警告消息:
必须将类'MyMiniTest'声明为abstract或实现抽象成员'convertToLegacyEqualizer [T](左:T):'org.scalactic.TripleEqualsSupport'中的TripleEqualsSupport.this.LegacyEqualizer [T]'
import org.scalatest.FeatureSpec
class MyMiniTest extends FeatureSpec {
  scenario("A simple test") {
    val a = 12
    assert(a * 3 == 36)
  }
}
Run Code Online (Sandbox Code Playgroud)
这个警告的原因是什么,推荐的解决方案是什么?
修复SBT驱逐警告信息是一个好主意吗?
通过将被驱逐的库的版本覆盖到最新版本.这会迫使SBT坚持使用被覆盖的版本吗?SBT是否仍会通知我们将来有更新的版本?
驱逐警告示例(SBT 0.13.13)
[warn] There may be incompatibilities among your library dependencies.
[warn] Here are some of the libraries that were evicted:
[warn]  * com.chuusai:shapeless_2.11:1.2.4 -> 2.3.2
[warn]  * org.postgresql:postgresql:9.4-1201-jdbc41 -> 9.4.1208.jre7
[warn]  * jline:jline:0.9.94 -> 2.12.1
[warn] Run 'evicted' to see detailed eviction warnings
Run Code Online (Sandbox Code Playgroud)
通过在build.sbt末尾添加警告来删除警告.遵循SBT文档驱逐警告中的说明
dependencyOverrides ++= Set(
  "org.postgresql" % "postgresql" % "9.4.1208.jre7",
  "com.chuusai" %% "shapeless" % "2.3.2",
  "jline" % "jline" % "2.12.1"
)
Run Code Online (Sandbox Code Playgroud) 我们假设当前分支是MyFeatureX.当地develop分支机构与原产地保持同步.以下两个陈述是否相同?推荐的语法是什么?
git rebase origin/develop 
git rebase develop 
Run Code Online (Sandbox Code Playgroud)
请注意:这不是同一个问题的git的变基原产vs.git重订产地/主
使用kube-prometheus-stack helm 图表,版本 35.2.0。到目前为止,我添加了我的 custom PrometheusRules,PodMonitor并ServiceMonitor通过 helm 自定义值。
helm install my-kubpromstack prometheus-community/kube-prometheus-stack -n monitoring \
  -f my-AlertRules.yaml \
  -f my-PodMonitor.yaml
Run Code Online (Sandbox Code Playgroud)
PrometheusRules或者如果或发生变化PodMonitor,我使用helm upgrade. 自定义值是基于kube-prometheus-stack/values.yaml定义的。我在单独的 YAML 文件中定义prometheus.additionalPodMonitors和的地方additionalPrometheusRulesMap
helm upgrade my-kubpromstack -n monitoring \
  --reuse-values \
  -f my-AlertRules.yaml \
  -f my-PodMonitor.yaml
Run Code Online (Sandbox Code Playgroud)
问题:如何使 Prometheus 服务器kube-prometheus-stack感知在 helm 值之外创建的规则、podmonitor、servicemonitor?
例如,PodMonitorPrometheus 不会选择下面的定义(即不会出现在 Prometheus UI 的目标中)。
kubectl apply -f - << EOF
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata: …Run Code Online (Sandbox Code Playgroud) 使用Apache Pig版本0.10.1.21(rexported).当我执行一个pig脚本时,有很多INFO日志行看起来像这样:
2013-05-18 14:30:12,810 [Thread-28] INFO  org.apache.hadoop.mapred.Task - Task 'attempt_local_0005_r_000000_0' done.
2013-05-18 14:30:18,064 [main] WARN  org.apache.pig.tools.pigstats.PigStatsUtil - Failed to get RunningJob for job job_local_0005
2013-05-18 14:30:18,094 [Thread-31] WARN  org.apache.hadoop.mapred.JobClient - No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
2013-05-18 14:30:18,114 [Thread-31] INFO  org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths to process : 1
2013-05-18 14:30:18,254 [Thread-32] INFO  org.apache.hadoop.mapred.Task -  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@3fcb2dd1
2013-05-18 14:30:18,265 [Thread-32] INFO  org.apache.hadoop.mapred.MapTask - io.sort.mb = 10
Run Code Online (Sandbox Code Playgroud)
猪脚本中是否有SET命令或命令行标志以允许记录级别?基本上我想隐藏[Thread-xx] INFO消息.仅显示警告和错误.我试过命令行调试标志.不幸的是,INFO消息仍然显示: …
git stash它放在一边.此外,我想在共享驱动器上备份该存储内容.只是为了安全.将存储内容归档到文件中的优雅解决方案是什么?
在范畴论中,filter操作是否被视为态射?如果是,那是什么样的态射?示例(在Scala中)
val myNums: Seq[Int] = Seq(-1, 3, -4, 2)
myNums.filter(_ > 0)
// Seq[Int] = List(3, 2) // result = subset, same type
myNums.filter(_ > -99)
// Seq[Int] = List(-1, 3, -4, 2) // result = identical than original
myNums.filter(_ > 99)
// Seq[Int] = List() // result = empty, same type
Run Code Online (Sandbox Code Playgroud) scala ×3
data.table ×2
dplyr ×2
git ×2
r ×2
apache-pig ×1
apache-spark ×1
git-rebase ×1
haskell ×1
rdd ×1
sbt ×1
scalatest ×1