小编phi*_*ert的帖子

什么`:_*`(冒号下划线星)在Scala中做什么?

我从这个问题得到以下代码:

def addChild(n: Node, newChild: Node) = n match {
  case Elem(prefix, label, attribs, scope, child @ _*) => Elem(prefix, label, attribs, scope, child ++ newChild : _*)
  case _ => error("Can only add children to elements!")
}
Run Code Online (Sandbox Code Playgroud)

除此之外,其中的所有内容都非常清晰: child ++ newChild : _*

它有什么作用?

我明白有Seq[Node]与另一个连接Node,然后呢?怎么: _*办?

scala pattern-matching

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

检查HDFS目录大小的方法?

我知道du -sh常见的Linux文件系统.但是如何用HDFS做到这一点?

directory command-line hadoop hdfs

86
推荐指数
5
解决办法
14万
查看次数

Scala不会与java.lang.String和Case Class进行模式匹配

你好同胞Scala程序员

我已经和Scala合作了一个月,但是我对一些基本的东西有问题,我希望你能帮助我.

case class PersonClass(name: String, age: Int)

object CaseTester {
def main(args:Array[String])
 {
  val string = "hej"
  string match {
    case e:String => println(string)
    case PersonClass => println(string)
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到错误:

pattern type is incompatible with expected type;
found   : object PersonClass
required: java.lang.String
case PersonClass => println(string)
Run Code Online (Sandbox Code Playgroud)

如果我然后将模式匹配中的第二行更改为以下内容:

case e:PersonClass => println(string)
Run Code Online (Sandbox Code Playgroud)

然后我得到错误:

error: scrutinee is incompatible with pattern type;
found   : PersonClass
required: java.lang.String
case e:PersonClass => println(string)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将字符串定义更改为以下内容,则在两种情况下都可以正常编译.

val string:AnyRef = "hej"
Run Code Online (Sandbox Code Playgroud)

types scala pattern-matching case-class

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

Spark SQL更改格式的编号

show命令火花打印如下:

+-----------------------+---------------------------+
|NameColumn             |NumberColumn               |
+-----------------------+---------------------------+
|name                   |4.3E-5                     |
+-----------------------+---------------------------+
Run Code Online (Sandbox Code Playgroud)

有没有办法将NumberColumn格式改为类似的东西0.000043

scala apache-spark apache-spark-sql

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

pyspark Window.partitionBy vs groupBy

假设我有一个大约21亿条记录的数据集.

这是一个包含客户信息的数据集,我想知道他们做了多少次.所以我应该对ID进行分组并对一列进行求和(它有0和1值,其中1表示动作).

现在,我可以用一个简单的groupByagg(sum)它,但我的理解这是不是真的有效.这groupBy将在分区之间移动大量数据.

或者,我也可以使用带有partitionBy子句的Window函数,然后对数据求和.其中一个缺点是我必须应用额外的过滤器,因为它会保留所有数据.我想要每个ID一个记录.

但我没有看到这个窗口如何处理数据.它比这个组还要好吗和总和.还是一样吗?

python apache-spark apache-spark-sql pyspark

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

Spark JDBC fetchsize 选项

我目前有一个应用程序,它应该连接到不同类型的数据库,使用 Spark 的 JDBC 选项在该数据库上运行特定查询,然后将生成的 DataFrame 写入 HDFS。

Oracle 的性能非常糟糕(没有检查所有这些)。原来这是因为fetchSizeOracle 的默认属性是 10 行。所以我将它增加到 1000,性能提升非常明显。然后,我将其更改为 10000,但随后一些表开始因执行程序中的内存不足问题而失败(6 个执行程序,每个 4G 内存,2G 驱动程序内存)。

我的问题是:

  • Spark 的 JDBC 获取的数据是否在每次运行时都保存在执行程序内存中?有什么办法可以在作业运行时取消持久化吗?

  • 我可以从哪里获得有关该fetchSize物业的更多信息?我猜它不会被所有 JDBC 驱动程序支持。

  • 是否还有其他与 JDBC 相关的事情需要注意以避免 OOM 错误?

jdbc apache-spark apache-spark-sql

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

如何使用 Spark 确定分区键/列

假设我用来partitionBy将一些数据保存到磁盘,例如按日期,所以我的数据如下所示:

/mydata/d=01-01-2018/part-00000
/mydata/d=01-01-2018/part-00001
...
/mydata/d=02-01-2018/part-00000
/mydata/d=02-01-2018/part-00001
...
Run Code Online (Sandbox Code Playgroud)

当我使用 Hive config 读取数据时DataFrame,所以

val df = sparkSession.sql(s"select * from $database.$tableName")
Run Code Online (Sandbox Code Playgroud)

我可以知道:

  • 列上的过滤查询d将下推
  • 如果我尝试按d(例如GROUP BY d)分区,则不会发生随机播放

但是,假设我不知道分区键是什么(某些上游作业写入数据,并且没有约定)。在本例中,如何让 Spark 告诉我哪个是分区键d。同样,如果我们有多个分区(例如按月、周、日)。

目前我们拥有的最好的代码确实很丑陋:

def getPartitionColumnsForHiveTable(databaseTableName: String)(implicit sparkSession: SparkSession): Set[String] = {
    val cols = sparkSession.
      sql(s"desc $databaseTableName")
      .select("col_name")
      .collect
      .map(_.getAs[String](0))
      .dropWhile(r => !r.matches("# col_name"))
    if (cols.isEmpty) {
      Set()
    } else {
      cols.tail.toSet
    }
  }
Run Code Online (Sandbox Code Playgroud)

hive scala apache-spark apache-spark-sql

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

spark 2.1.1:解析的JSON值与类构造函数不匹配

spark 2.1.1和他有一个奇怪的问题json4s.jackson.

我升级了我的流媒体项目spark 1.5.1.现在当我在IDE中执行代码时,一切正常.

但之后assembly和代码独立执行spark-submit

我收到以下错误

Caused by: org.json4s.package$MappingException: Parsed JSON values do not match with class constructor
args=
arg types=
constructor=  
Run Code Online (Sandbox Code Playgroud)

我的Environemnt:

  • 火花= 2.1.1
  • 阶= 2.11,
  • json4s杰克逊= 3.2.11

以前有人遇到过同样的问题吗?如果是的话,你是怎么解决的?

非常感谢.

json jackson json4s apache-spark spark-streaming

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

Spring-Data 中 @RestResource(exported=false) 的确切含义是什么?

我看到,与 spring-data-rest 存储库一起使用时,一组实体上的注释@RestResource(exported=false)不会导出该组,而是嵌入该组实体而不是渲染 url。

这是预期的行为吗?

exported=false至少可以说,这个属性不是具有误导性吗?该注释的确切语义是什么?

我将 spring-data-rest 与 neo4j 一起使用,即我的项目依赖于 spring-data-neo4j。

spring neo4j spring-data spring-data-neo4j spring-boot

6
推荐指数
0
解决办法
476
查看次数

如何使用pyspark将bz2文件读入数据帧?

我可以使用以下命令将 json 文件读入 Pyspark 中的数据帧

spark = SparkSession.builder.appName('GetDetails').getOrCreate()
df = spark.read.json("path to json file")
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将 bz2(压缩的 csv)读入数据帧时,它给了我一个错误。我在用:

spark = SparkSession.builder.appName('GetDetails').getOrCreate()
df = spark.read.load("path to bz2 file")
Run Code Online (Sandbox Code Playgroud)

你能帮我纠正一下吗?

python apache-spark apache-spark-sql pyspark

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