java - 如何使用 FileWriter 将文件写入 google dataproc?

标签 java google-cloud-dataproc

我有一个 java spark 应用程序,需要收集 spark 作业的输出,然后将其保存到 csv 文件中。这是我的代码:

fileWriter = new FileWriter("gs://dataflow-exp1/google_storage_tests/20170524/outputfolder/Test.csv", true);
fileWriter.append("col1,col2,col3,col4");

当我在 google data proc 中执行 spark 作业时,出现找不到文件异常。我也确实对该文件夹具有读/写权限。

java.io.FileNotFoundException: gs:/dataflow-exp1/google_storage_tests/20170524/outputfolder/Test.csv (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
at java.io.FileWriter.<init>(FileWriter.java:78)
at com.src.main.MyApp.testWriteOutput(MyApp.java:72)
at com.src.main.MyApp.main(MyApp.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:736)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

看起来文件编写器在运行时使用单斜杠 / 而不是 gs: 之后的双斜杠 //。我该如何解决这个问题?

我也愿意使用其他方式代替 FileWriter 将文件写入 google data proc。

最佳答案

Dataproc 安装 Hadoop FileSystem可从 Spark 访问的 GCS 连接器;通常,Hadoop 或 Spark 中的内容应该构建在该接口(interface)之上,该接口(interface)不会自动与基本 Java File 接口(interface)兼容。你应该这样做:

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.Configuration;

Path outputPath = new Path("gs://dataflow-exp1/google_storage_tests/20170524/outputfolder/Test.csv");
OutputStream out = outputPath.getFileSystem(new Configuration()).create(outputPath);

然后根据您需要的任何编写器界面对其进行调整。

关于java - 如何使用 FileWriter 将文件写入 google dataproc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44156052/

相关文章:

hive - 我可以将 Cloud Dataproc 与外部 Hive Metastore 一起使用吗?

google-cloud-platform - Google Cloud Data Catalog 是否可以用作 Dataproc (Spark/Hive/Presto) 以及 GCS 文件的元数据存储库?

hadoop - 尝试在 Dataproc 上运行 Gobblin 时出现 NoSuchMethodError

java - 在 fragment 上添加唤醒锁不工作突出显示红色

java - JList 找出哪个项目被点击

gcloud - Dataproc gcloud default_config 权限被拒绝错误

apache-spark - delta Lake - 在 pyspark 中插入 sql 失败,java.lang.NoSuchMethodError : org. apache.spark.sql.catalyst.expressions.Alias

java - ConcurrentHashMap 更改对所有线程可见?

java - 数学表达式中的单独数字

java - Android 从相机获取 URI