我正在使用Spark 2.2.1。
我有一个小的DataFrame(小于1M),我在一个大的DataFrame上进行计算,需要这个小的DataFrame来计算UDF中的列。
关于表现的最佳选择
播放这个DF是否更好(我不知道Spark是否会将笛卡尔语转换为内存)。
fib3
或收集它并直接在udf
中使用bigDF.crossJoin(broadcast(smallDF))
.withColumn(udf("$colFromSmall", $"colFromBig"))
值
small
答案 0 :(得分:1)
两者都将postTest() async {
const body = "This is my body";
var httpclient = new HttpClient();
await httpclient
.postUrl(Uri.parse(
"http://httpbin.org/post"))
.then(
(HttpClientRequest request) {
request.headers.contentLength =
body.length;
request.write(body);
return request.close();
}).then((HttpClientResponse
response) async {
print(response.statusCode);
print(response.headers);
print(await response
.transform(UTF8.decoder)
.join());
});
}
数据放在首位,因此就内存占用而言,没有区别。所以选择应该由逻辑决定:
collect
可能是更好的方法。udf
- 那么就会消亡 - 只需选择前一个选项。根据in the comments在第二种情况下的T.Gawęda建议您可以使用广播
explode
如果重复使用val small = spark.spark.broadcast(smallDF.collect())
bigDF.withColumn(udf($"colFromBig"))
,它可能会提供一些性能改进。