JavaRDD <String>в JavaRDD <Row> - PullRequest
1 голос
/ 21 марта 2019

Я читаю текстовый файл как JavaRDD с помощью следующей команды:

JavaRDD<String> vertexRDD = ctx.textFile(pathVertex);

Теперь я хотел бы преобразовать это в JavaRDD, потому что в этом текстовом файле у меня есть два столбца целых чисел и я хочу добавить некоторую схему в строки после разделения столбцов.

Я пробовал также это:

JavaRDD<Row> rows = vertexRDD.map(line -> line.split("\t"))

Но это говорит о том, что я не могу назначить функцию карты для "Объекта" СДР

  1. Как я могу создать JavaRDD из JavaRDD
  2. Как я могу использовать карту для JavaRDD?

Спасибо!

1 Ответ

0 голосов
/ 21 марта 2019

Создание JavaRDD из другого неявно, когда вы применяете преобразование, такое как map. Здесь RDD, который вы создаете, является RDD массивов строк (результат split).

Чтобы получить СДР из строк, просто создайте строку из массива:

JavaRDD<String> vertexRDD = ctx.textFile("");
JavaRDD<String[]> rddOfArrays = vertexRDD.map(line -> line.split("\t"));
JavaRDD<Row> rddOfRows =rddOfArrays.map(fields -> RowFactory.create(fields));

Обратите внимание, что если ваша цель состоит в том, чтобы преобразовать JavaRDD<Row> в кадр данных (Dataset<Row>), есть более простой способ. Вы можете изменить опцию разделителя при использовании spark.read, чтобы избежать необходимости использовать RDD:

Dataset<Row> dataframe = spark.read()
    .option("delimiter", "\t")
    .csv("your_path/file.csv");  
...