我在我的日志记录类中定义了一个静态对象,其行如下:
class myLoggingClass {
static java.util.Properties properties;
...
...
}
Run Code Online (Sandbox Code Playgroud)
根据我的参考书,这意味着属性对象由我的类的所有实例共享.
我觉得这个定义不够.我正在编写一个在我们项目的每个应用程序中多次调用的类.
此外,我们的项目使用在同一个tomcat容器中运行的多个Web服务.每个Web服务可能有多个线程.
在主机上运行的Java虚拟机还可以运行一个或多个Web服务客户端应用程序,这些应用程序在tomcat外部运行.
因此,通过这个定义,我可能让tomcat运行带有线程的多个Web服务,每个线程都有几个对象,这些对象可能包含我的类的实例.
也可能有一个或两个Web客户端在tomcat之外运行,但在同一个JVM中.将所有的我的课分享这些实例的相同属性对象?这将使其成为JVM范围的.
如果静态对象不是 JVM范围的,那么有人知道每个对象存在的级别吗?每个tomcat容器一个?每个Web服务一个,每个独立Web服务客户端应用程序一个?
原因是:当我更新我的属性时,我从java.util.Properties获得了java.lang.ConcurrentUpdateException.
我正在使用静态布尔变量来在我的类更新时"锁定"属性对象,但这并不能防止异常发生.
这让我相信我的类中使用的静态对象可能与java.util.Properties中使用的静态对象没有相同的范围级别......但这只是猜测.
谢谢你的帮助.
我正在实现一个spark应用程序,下面是一个示例代码段(不完全相同的代码):
val rdd1 = sc.textfile(HDFS_PATH)
val rdd2 = rdd1.map(func)
rdd2.persist(StorageLevel.MEMORY_AND_DISK)
println(rdd2.count)
Run Code Online (Sandbox Code Playgroud)
在从Spark Application Master UI检查此代码的性能时,我看到了该count操作的条目,但没有看到该条目的条目persist.此计数操作的DAG还具有"映射"转换的节点(上述代码的第2行).
可以安全地得出结论,当count遇到(在最后一行)时执行地图转换,而不是在persist遇到时?
另外,在什么时候rdd2实际上仍然存在?据我所知,在RDD上只能调用两种类型的操作 - 转换和操作.如果在count调用动作时RDD持续存在,那么会持续被认为是转换还是动作,或者两者都没有?
我想要计算两个列表的标量积.比方说,我们有两个列表,l1 = List(1,2,3)并且l2 = List(4,5,6),其结果应该是List(4,10,18)
以下代码有效:
def scalarProduct(l1 : List[Int], l2 : List[Int]):List[Int] = {
val l3 = l1 zip(l2); l3 map(xy => xy._1*xy._2)
}
Run Code Online (Sandbox Code Playgroud)
但是,以下内容无法编译,并说Cannot resolve reference map with such signature:
def scalarProduct(l1 : List[Int], l2 : List[Int]):List[Int] = {
val l3 = l1 zip(l2); l3 map((x:Int,y:Int) => x*y)
}
Run Code Online (Sandbox Code Playgroud)
这个zip()将返回一个Int对列表,上面的映射也采用了一个Int对的函数.有人可以指出为什么第二种变体在这种情况下会失败?
Spark中有什么区别sortBy和sortByKey功能有什么区别?
我在下面的转换中执行此操作,其中我使用sortBy&sortByKey.两者都给出了相同的结果,然后有什么不同.
val reducedSfpd = sfpd.map(x => (x(col_2),1)).reduceByKey((x,y) => x+y)
val top3Dist = reducedSfpd.sortBy(_._2,false).collect().take(3)
val top3Dist = reducedSfpd.map(x => x.swap).sortByKey(false).take(3)
Run Code Online (Sandbox Code Playgroud)
sortBy && sortByKey之间是否存在性能相关的差异.
事实上,当我使用时,sortBy我正在保存一个通过应用map函数交换'Key - Values'的转换.那为什么sortByKey呢?
我正在学习Spark和Scala。我精通Java,但对Scala却不太了解。我正在阅读有关Spark的教程,并遇到了以下代码行,但尚未解释:
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
Run Code Online (Sandbox Code Playgroud)
(sc是SparkContext实例)
我知道scala隐式背后的概念(至少我想我知道)。有人可以向我解释import以上声明的确切含义吗?什么implicits是绑定到sqlContext实例时,它被实例化,怎么样?这些隐式是否在SQLContext类内定义?
编辑 以下内容似乎也对我有用(新鲜代码):
val sqlc = new SQLContext(sc)
import sqlContext.implicits._
Run Code Online (Sandbox Code Playgroud)
在上面的代码中。sqlContext到底是什么?在哪里定义?
我正在学习hadoop mapreduce,我正在使用Java API.我了解到TotalOrderPartitioner用于通过密钥在整个集群中"全局"排序输出,并且需要一个分区文件(使用InputSampler生成):
job.setPartitionerClass(TotalOrderPartitioner.class);
InputSampler.Sampler<Text, Text> sampler = new InputSampler.RandomSampler<Text, Text>(0.1, 200);
InputSampler.writePartitionFile(job, sampler);
Run Code Online (Sandbox Code Playgroud)
我有几个疑问,我寻求社区的帮助:
"全球排序"这个词到底意味着什么?输出究竟是如何排序的,我们仍然有多个分布在整个群集中的输出部分文件?
如果我们不提供分区文件会发生什么?有没有一种默认的方法来处理这种情况?
我希望能够在application.conf我的 Web 应用程序中将属性定义为 json 字符串,如下所示:
prop1 = "{key1:value1 , key2:value2}"
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,值中有双引号,并且 '\' 不能用作转义字符。如何在 prop1 中声明 json,其中包含双引号,例如
prop1 = "{key1 : \"value1\", key2:\"value2\" }"
Run Code Online (Sandbox Code Playgroud) 当我遇到一个术语“可拆分”时,我正在学习各种压缩编解码器。现在这个术语在我研究过的任何互联网资源和书籍中都没有得到太多解释,所以我想我可能在这里遗漏了一些微不足道的东西。我的第一个猜测是,某些编解码器将元数据作为标头/拖尾添加到压缩文件中,这意味着如果将压缩文件拆分为多个 HDFS 块进行存储,则除非所有拆分都是合并在一起。如果是这种情况,不可拆分文件的拆分(块)如何发送到映射器以输入到 MR 应用程序?
我知道 hadoop 确实支持 gzip(不可拆分编解码器),但我不明白具体是如何支持的。
有人可以详细解释编解码器不可拆分的含义是什么或共享一些具有相同作用的链接吗?
apache-spark ×3
scala ×3
hadoop ×2
java ×2
compression ×1
escaping ×1
hdfs ×1
mapreduce ×1
scope ×1