有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

sparktestingbase使用配置单元支持为Spark编写Java JUnit测试

我正在使用https://github.com/holdenk/spark-testing-base编写JUnit测试
检查以下代码:

public class MyTestSuite extends JavaDataFrameSuiteBase implements Serializable {
    ....
    @Test
    public void oneTest() {

        ClassLoader classLoader = getClass().getClassLoader();
        File testData = new File(classLoader.getResource("testFile1.txt").getFile());
        JavaRDD<String> lines = jsc().textFile(testData.getAbsolutePath());
        ...

我可以将/src/test/resources中包含的测试数据读取到RDD,这样就可以运行mvn test

但是,我的目标是测试一个类HiveLoader(hdfs中的文件位置、数据库名称、会话),它需要hdfs中的一个文件作为输入,并从给定数据库中的该文件创建一个配置单元表。以下操作失败:

    ....
    @Test
    public void oneTest() {
       File testData = new File(classLoader.getResource("testFile1.txt").getFile());
       HiveLoader loader = new HiveLoader(testData.getAbsolutePath(), "db_name", spark())
       ...

我得到的例外是:

org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:java.lang.IllegalArgumentException: Can not create a Path from an empty string);

该文件必须为HDFS格式。在尝试了很多东西之后,我发现了这个不优雅的解决方法:

    ....
    @Test
    public void oneTest() {           
        File testData = new File(classLoader.getResource("testFile1.txt").getFile());
        JavaRDD<String> lines = jsc().textFile(testData.getAbsolutePath());
        lines.saveAsTextFile("/desired_location_in_hdfs");          

        TripleTableLoader tt_loader = new TripleTableLoader("/desired_location_in_hdfs", "db_name", spark);

基本上,我在本地将文件读入RDD并将其写回HDFS

是否有更好的解决方案使此文件在适用于spark testing base的HDFS中可用


共 (0) 个答案