相关疑难解决方法(0)

最后相当于Scala Try

def doWork() = {
  getLock()
  Try(useResource) match {
    case Success(result) => releaseLock(); result
    case Failure(e: Exception) => releaseLock(); throw e
  }
}
Run Code Online (Sandbox Code Playgroud)

当我退出时,我正在努力确保锁定被释放doWork.但是作为该方法的一部分,我可能会抛出一个异常,所以我不能在最后释放锁doWork.

releaseLock()重复两次,看起来有点代码味道.我可以通过使用传统的Java风格的try/catch/finally来减少它:

def doWork() = {
  getLock()
  try {
    useResource
  } catch {
    case e: Exception => throw e
  } finally {
    releaseLock()
  }
}
Run Code Online (Sandbox Code Playgroud)

Try如果可能的话,我更喜欢使用Scala .

有没有办法在框架内执行"最终"逻辑Try

scala

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

类似的Try块在scala中尝试/ finally块

斯卡拉的方式类似于Try:

timer.start()
try {
  doThis()
} finally {
  timer.cancel()
}
Run Code Online (Sandbox Code Playgroud)

functional-programming scala

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

Play 框架:访问和操作全局变量

我目前正在构建一个会计应用程序,现在我想保留这个可变的“期间结束日期”。我相信我们可以使用全局变量,但是我不知道该怎么做。到目前为止我尝试过的是在application.conf这样的application.date="2014/12/15".

此外,我不确定如何使用上述方法更改值。这个问题有什么好的方法吗?

scala playframework-2.2

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

使用scala将Spark处理的结果转储到HDFS

在使用spark处理数据后,我找到了将数据保存到HDFS的正确方法,我感到有点困惑.

这就是我想要做的.我正在计算数字字段的最小值,最大值和标准差.我的输入文件有数百万行,但输出只有大约15-20个字段.因此,输出是每个字段的单个值(标量).

例如:我将FIELD1的所有行加载到RDD中,最后,我将获得FIELD 1的3个单值(MIN,MAX,SD).我将这三个值连接成临时字符串.最后,我将有15到20行,包含以下格式的4列

FIELD_NAME_1  MIN  MAX  SD
FIELD_NAME_2  MIN  MAX  SD
Run Code Online (Sandbox Code Playgroud)

这是代码的片段:

//create rdd
val data = sc.textFile("hdfs://x.x.x.x/"+args(1)).cache()
//just get the first column
val values = data.map(_.split(",",-1)(1))

val data_double= values.map(x=>if(x==""){0}else{x}.toDouble)
val min_value= data_double.map((_,1)).reduceByKey((_+_)).sortByKey(true).take(1)(0)._1
val max_value= data_double.map((_,1)).reduceByKey((_+_)).sortByKey(false).take(1)(0)._1
val SD = data_double.stdev
Run Code Online (Sandbox Code Playgroud)

所以,我有3个变量,min_value,max_value和SD,我想存储回hdfs.

问题1:由于输出相当小,我是否只在本地保存在服务器上?或者我应该将其转储到HDFS.在我看来就像在本地转储文件更有意义.

问题2:在spark中,我可以调用以下命令将RDD保存到文本文件中

some_RDD.saveAsTextFile("hdfs://namenode/path")
Run Code Online (Sandbox Code Playgroud)

如何在scala中不是RDD的String变量中完成相同的操作?我应该首先将我的结果并行化为RDD,然后调用saveAsTextFile吗?

hadoop scala hdfs apache-spark

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

如何将Array [String]存储到输出文件

我有一个名为samparr的Array [String],其中包含一些值,我希望将其存储为输出文件。

var samparr: Array[String] = new Array[String](4)
samparr +:= print1 + "  BEST_MATCH  " + print2
Run Code Online (Sandbox Code Playgroud)

就像,

val output = samparr.saveAsTextFile(outputpath)
Run Code Online (Sandbox Code Playgroud)

但不是RDD,而是一个Array [String]

scala apache-spark

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

制作文件夹/文件并在scala中写入?

如何在scala中创建文件和文件夹并写入它们?我理解它在其他语言中是如何工作的,但Scala有点棘手:/

这与其他问题不同,因为它还询问如何在Scala中创建目录和文件.

scala

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

如何从CSV文件创建模式并将该模式​​持久/保存到文件?

我有10列的CSV文件。Half String和Half是Integers。

什么是Scala代码以:

  • 创建(推断)架构
  • 将该架构保存到文件

到目前为止,我有:

import org.apache.spark.sql.SQLContext

val sqlContext = new SQLContext(sc)
val df = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "true") // Use first line of all files as header
    .option("inferSchema", "true") // Automatically infer data types
    .load("cars.csv")
Run Code Online (Sandbox Code Playgroud)

保存该模式的最佳文件格式是什么?是JSON吗?

目标是-我只想创建一次架构,下一次从文件中加载,而不是即时重新创建。

谢谢。

schema scala apache-spark

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