Java:使用spark数据帧对HDFS读/写操作进行单元测试

时间:2019-06-17 11:05:19

标签: java apache-spark-sql hdfs hadoop2

我正在将spark dataframes写入/读取到Linux上的远程hdfs集群。

dataFrame.select("col1", "col2", "col3").writeAsCSV("hdfs://localhost:8005//csvFile");
Assert.assertEquals(ERROR_MESSAGE, "No match", dataFrame.first().getString(5));

如果spark远程集群不可用,则代码将切换到本地spark。类似地,有什么方法可以mock hdfs实例吗?我正在windows上运行代码。 我不希望单元测试要求在运行的每台计算机上都安装hdfs。

我已经尝试过使用tutorial进行“使用hdfs进行火花单元测试”。它使用文件系统进行读写操作。我为minicluster尝试了此设置:

conf = new HdfsConfiguration();
File baseDir = new File("target/hdfs/").getAbsoluteFile();
FileUtil.fullyDelete(baseDir);
conf.set(MiniDFSCluster.HDFS_MINIDFS_BASEDIR, baseDir.getAbsolutePath());
cluster = new MiniDFSCluster.Builder(conf).nameNodePort(8005).build();

这在写入时没有给出任何错误,但表示在尝试读取时该路径不存在。

Dataset<org.apache.spark.sql.Row> df = SparkSession.active().read()
            .option("mode", "DROPMALFORMED")
            .schema(schema)
            .csv("hdfs://localhost:8005//csvFile");

注意: 使用的版本: 火花(2.4.2), 斯卡拉(2.12), hadoop-minicluster(3.2.0或2.6.5)

有人可以提出一些类似的建议来处理数据框吗?

0 个答案:

没有答案