我使用if (-not $DNSSuffixs -is [Array]) {
$DNSSuffixs = $DNSSuffixs -split ','
}
以便将输出保存为文本文件,以便将结果导入到DB中。输出看起来像这样:
saveAsTextFile(path)
如何删除括号?
答案 0 :(得分:14)
您可以尝试以下非常基本的内容:
rdd.map(x => x._1 + "," + x._2).saveAsTextFile(path)
您只需将您的RDD [(A,B)]映射到RDD [String]并保存。
答案 1 :(得分:6)
在saveAsTextFile
使用map(x => x.mkString(",")
rdd.map(x => x.mkString(",").saveAsTextFile(path)
输出没有括号。
答案 2 :(得分:3)
对于Java世界中的人们来说,这是一个以DataFrame开头的解决方案,将其转换为RDD然后写入结果。 RDD的行通过map函数传递,该函数将Row转换为String。
public void write(DataFrame output) {
String path = "your_path_goes_here";
output
.toJavaRDD()
.map(new BracketRemover())
.saveAsTextFile(path);
}
protected class BracketRemover implements Function<Row, String> {
public String call(Row r) {
return r.mkString(",");
}
}
答案 3 :(得分:1)
尝试明确使用mkString
而不是直接打印元组。
答案 4 :(得分:0)
您可以使用保存rdd rdd.map(rec =&gt; rec.productIterator.mkString(“,”)。saveAsTextFile(path) 生成的数据集将没有括号。
答案 5 :(得分:0)
我知道它被标记为Scala,但只是添加Python的一面以防万一有人好奇。创建RDD并按原样保存
rdd_of_tuples = sc.parallelize([('one',1),('two',2)])
rdd_of_tuples.saveAsTextFile('/user/cloudera/rdd_of_tuples')
这会像你提到的那样保存这样的行
('one', 1)
但如果你这样做,它应该工作
rdd_of_text = rdd_of_tuples.map(lambda (x,y): x + ',' + str(y)).saveAsTextFile('/user/cloudera/rdd_of_text')
你应该得到
one,1
请注意,在这种特殊情况下,您需要了解连接类型(检查str(y)),否则您将获得以下异常
TypeError: cannot concatenate 'str' and 'int' objects