我正在将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)
有人可以提出一些类似的建议来处理数据框吗?