我目前正在尝试通过Spark SQL将非常大的MySQL表的内容批量迁移到镶木地板文件中.但是当这样做时,即使将驱动程序的内存限制设置得更高(我在本地模式下使用spark),我也会快速耗尽内存.示例代码:
Dataset<Row> ds = spark.read()
.format("jdbc")
.option("url", url)
.option("driver", "com.mysql.jdbc.Driver")
.option("dbtable", "bigdatatable")
.option("user", "root")
.option("password", "foobar")
.load();
ds.write().mode(SaveMode.Append).parquet("data/bigdatatable");
Run Code Online (Sandbox Code Playgroud)
似乎Spark试图将整个表内容读入内存,这样做不会很好.那么,通过Spark SQL进行批量数据迁移的最佳方法是什么?
什么被认为是Java 8中Collection的惯用迭代,为什么?
for (String foo : foos) {
String bar = bars.get(foo);
if (bar != null)
System.out.println(foo);
}
Run Code Online (Sandbox Code Playgroud)
要么
foos.forEach(foo -> {
String bar = bars.get(foo);
if (bar != null)
System.out.println(foo);
});
Run Code Online (Sandbox Code Playgroud) 如何检查类的字节码(使用诸如ASM之类的东西)来了解哪些初始值传递给方法?
例如:给定一些将值互相传递的方法:
void m1(Object o) {
Object v = o;
m2(v);
m2("box");
}
void m2(Object o) {
Object v = o;
m3(x);
}
void m3(Object o) {
}
Run Code Online (Sandbox Code Playgroud)
还有一些方法调用,都在同一个类中定义:
{
Object foo = "foo";
m1(foo);
m2("bar");
m3("baz");
}
Run Code Online (Sandbox Code Playgroud)
我怎么可以检查类的字节码得知m3将与值被称为4倍"foo","box","bar"和"baz"?
我注意到我用来连接到新创建的 LXC 容器的用户名/密码lxc-console不适用于 ssh(在容器中运行 sshd)。当我尝试时,我明白Permission denied为什么会这样,我怎样才能让它工作?