小编Mar*_*ról的帖子

如何使用spark sql过滤特定聚合的行?

通常,组中的所有行都将传递给聚合函数.我想使用条件过滤行,以便只将组中的某些行传递给聚合函数.PostgreSQL可以实现这样的操作.我想用Spark SQL DataFrame(Spark 2.0.0)做同样的事情.

代码可能看起来像这样:

val df = ... // some data frame
df.groupBy("A").agg(
  max("B").where("B").less(10), // there is no such method as `where` :(
  max("C").where("C").less(5)
)
Run Code Online (Sandbox Code Playgroud)

所以对于像这样的数据框:

| A | B | C |
|  1| 14|  4|
|  1|  9|  3|
|  2|  5|  6|
Run Code Online (Sandbox Code Playgroud)

结果将是:

|A|max(B)|max(C)|
|1|    9|      4|
|2|    5|   null|
Run Code Online (Sandbox Code Playgroud)

是否可以使用Spark SQL?

请注意,通常max可以使用任何其他聚合函数,并且在具有任意过滤条件的同一列上可能存在多个聚合.

sql aggregate apache-spark apache-spark-sql spark-dataframe

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

可变参数模板lambda参数的模板推导

给出以下可变参数模板:

template<typename... Params>
void fun(void(*f)(Params...), Params... params) {
  f(params...);
}

int main() {
  fun(+[](int a, int b) {}, 2, 3);
}
Run Code Online (Sandbox Code Playgroud)

现在,当fun使用lambda 调用时,我需要明确指定所有lambda参数的类型.这似乎是多余的,因为int, int可以从中推断出来2, 3.有没有办法让它更简洁自动?

我想以下工作,但它没有:

template<typename... Params>
void fun(void(*f)(Params...), Params... params) {
  f(params...);
}

int main() {
  fun(+[](auto a, auto b) {}, 2, 3);
}
Run Code Online (Sandbox Code Playgroud)

我正在编译g++ 5.4.0-std=c++14.

c++ lambda templates generic-lambda

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

正则表达式与sed,搜索多行

我想连接几行,对它们执行正则表达式匹配并打印它们.我试着用sed做到这一点.

即,我用过:

cat add | sed -rn '/FIRST_LINE_REGEX/,/LAST_LINE_REGEX/s/SOME_REGEX/&/p'
Run Code Online (Sandbox Code Playgroud)

它只打印与SOME_REGEX匹配的行,而我希望它连接FIRST_LINE和LAST_LINE之间的行,并打印串联(如果它与SOME_REGEX匹配).

regex unix sed

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

Java8,有过滤器吗?

我想对一个集合进行分组,但我不希望聚合包含一些值.这样做的最佳解决方案是什么?

解决方案可能是收集器,filtering(Predicate,Collector)但没有这样的收集器.没有实现自己的收藏家,有没有办法做到这一点?

IntStream.range(0,100).collect(
    groupingBy(
       i -> i % 3,
       HashMap::new,
       filtering( i -> i % 2 == 0, toSet() )
    )
);
Run Code Online (Sandbox Code Playgroud)

java predicates collectors

3
推荐指数
2
解决办法
1142
查看次数

为什么指向函数指针的指针是8字节?

我知道一个函数的指针是8字节,因为虚拟化,但为什么指向函数指针的指针是8字节?

typedef void(*fun())();
sizeof(fun*); // returns 8 byte
Run Code Online (Sandbox Code Playgroud)

c pointers function

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

为什么懒惰的val在枚举中表现得如此神秘,Scala?

我想懒得找到所有已定义的枚举值名称的最大值.执行时下面的代码片段会反复进行无限循环打印InvocationTargetException.

object Enum extends Enumeration with App {
  val A, B = new Val
  lazy val foo = values.maxBy(_.toString)

  println(Enum.foo)
}
Run Code Online (Sandbox Code Playgroud)

当该问题不会出现foo是一个def.

为什么它会像这样?不lazy val应该只是一个记忆def

奇怪的是,下面的代码确实按预期工作:

object Enum extends Enumeration with App {
  val A, B = new Val
  lazy val foo = values.foldLeft(""){(a, b) => a + b}

  println(Enum.foo)
}
Run Code Online (Sandbox Code Playgroud)

我正在使用scala 2.11.7.

// ---解决方案

问题是foo是Value类型的,因此被解释为枚举值.解决问题的方法是创建一个代理def,lazy val如下面的代码:

object Enum extends Enumeration with App {
  val …
Run Code Online (Sandbox Code Playgroud)

enums scala lazy-evaluation

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

如何将html标记与perl正则表达式匹配?

鉴于下面的代码,我想匹配第一次form出现.我发现负面前瞻?!可能用于实现这一目标,但它不起作用.我的正则表达式有什么问题?

#test
$test = "<form abc> foo </form> <form gg> bar </form>";
$test =~ m/<form[^>]*abc[^>]*>(?!.*form>.*)form>/s;
print $&;
Run Code Online (Sandbox Code Playgroud)

regex perl match lookahead

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