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?
斯卡拉的方式类似于Try:
timer.start()
try {
doThis()
} finally {
timer.cancel()
}
Run Code Online (Sandbox Code Playgroud) 我目前正在构建一个会计应用程序,现在我想保留这个可变的“期间结束日期”。我相信我们可以使用全局变量,但是我不知道该怎么做。到目前为止我尝试过的是在application.conf这样的application.date="2014/12/15".
此外,我不确定如何使用上述方法更改值。这个问题有什么好的方法吗?
在使用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吗?
我有一个名为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中创建文件和文件夹并写入它们?我理解它在其他语言中是如何工作的,但Scala有点棘手:/
这与其他问题不同,因为它还询问如何在Scala中创建目录和文件.
我有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吗?
目标是-我只想创建一次架构,下一次从文件中加载,而不是即时重新创建。
谢谢。