我试图从给定的String路径中提取文件的扩展名.
下面这段代码可以工作,但我想知道是否有一个更干净,更惯用的Rust方法来实现这个目的:
use std::path::Path;
fn main() {
fn get_extension_from_filename(filename: String) -> String {
//Change it to a canonical file path.
let path = Path::new(&filename).canonicalize().expect(
"Expecting an existing filename",
);
let filepath = path.to_str();
let name = filepath.unwrap().split('/');
let names: Vec<&str> = name.collect();
let extension = names.last().expect("File extension can not be read.");
let extens: Vec<&str> = extension.split(".").collect();
extens[1..(extens.len())].join(".").to_string()
}
assert_eq!(get_extension_from_filename("abc.tar.gz".to_string()) ,"tar.gz" );
assert_eq!(get_extension_from_filename("abc..gz".to_string()) ,".gz" );
assert_eq!(get_extension_from_filename("abc.gz".to_string()) , "gz");
}
Run Code Online (Sandbox Code Playgroud) 我正在浏览 spark 的文档。我对 rdd.repartition() 函数和我们在 sc.parallelize() 中的上下文初始化期间传递的分区数感到有些困惑。
我的机器上有 4 个内核,如果我 sc.parallelize(data, 4) 一切正常,但是当我 rdd.repartition(4) 并应用 rdd.mappartitions(fun) 有时分区没有数据并且我的功能失败这样的情况。
所以,只是想了解这两种分区方式有什么区别。