我知道常量池的概念和JVM用来处理String文字的String常量池.但我不知道JVM使用哪种类型的内存来存储String常量文字.堆栈还是堆?由于它是一个与任何实例无关的文字,我会认为它将存储在堆栈中.但是如果它没有被任何实例引用,那么必须通过GC运行收集文字(如果我错了,请纠正我),那么如果它存储在堆栈中怎么处理呢?
在Java中,创建静态方法以在没有任何对象实例的情况下访问它.这对我来说很有意义.但最近我遇到了一个奇怪的事情,Java中的静态方法也可以通过它的对象实例访问.这对我来说非常奇怪.你们有谁知道为什么这个功能是由Java提供的?什么是允许静态方法被访问以及没有实例的重要性?
我有格式化为以下示例的大数据记录:
// +---+------+------+
// |cid|itemId|bought|
// +---+------+------+
// |abc| 123| true|
// |abc| 345| true|
// |abc| 567| true|
// |def| 123| true|
// |def| 345| true|
// |def| 567| true|
// |def| 789| false|
// +---+------+------+
Run Code Online (Sandbox Code Playgroud)
cid并且itemId是字符串。
有965,964,223条记录。
我正在尝试cid使用StringIndexer以下方法将其转换为整数:
dataset.repartition(50)
val cidIndexer = new StringIndexer().setInputCol("cid").setOutputCol("cidIndex")
val cidIndexedMatrix = cidIndexer.fit(dataset).transform(dataset)
Run Code Online (Sandbox Code Playgroud)
但是这些代码行非常慢(大约需要30分钟)。问题在于它是如此之大,以至于我之后再也无能为力了。
我正在使用具有2个节点(61 GB内存)的R4 2XLarge集群的Amazon EMR集群。
我可以进一步改善性能吗?任何帮助都感激不尽。
我知道我们可以使用Apache POI解析Excel文件并获取数据。但是我听说一个奇怪的事情,可以以类似于解析CSV的方式传递excel文件(就像刚刚从文件Stream中读取文件,并使用“逗号”分隔每个列值)。解析Excel时,我们必须使用tab作为分隔符。可能吗?如果是,那么Apache为什么要提出这样一个复杂的框架。我很困惑。有人能帮我吗?
我试图理解为什么Java中的向量必须同步.无论我通过谷歌到达哪里,他们说它的同步是因为它的元素被同步阻止其他线程在一个线程访问它时访问.但我真正想知道的是为什么它必须是?Java应该将它留给正在访问它的人.但是为什么Java强迫所有访问矢量的人使用同步数据结构呢?我同意那些说ArrayList可以用于我的要求的人.但我的观点是那个载体会给我什么?
谢谢和问候,Rengasami Ramanujam
为什么不应该这样做?当执行垃圾收集时将调用终结器,为什么我们不能在这里添加持久性相关代码?
java ×5
apache-poi ×1
apache-spark ×1
finalizer ×1
jvm ×1
methods ×1
static ×1
string ×1
vector ×1