Я использую 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, вСДР, позволяющий запустить mvn test .
Однако моя цель - проверить класс HiveLoader (file_location_in_hdfs, database_name, session) , который ожидает файлв HDFS в качестве входных данных и создает таблицу Hive из него в заданной базе данных.Не удается выполнить следующее:
....
@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: невозможно создать путь из пустой строки);
Файл должен быть в 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.
Есть ли лучшее решение, чтобы сделатьэтот файл доступен в HDFS, который работает на базе spark-testing?