Вопрос:

Сохранение кадра данных в виде текстового файла без использования API блоков данных

java hadoop apache-spark apache-spark-sql spark-dataframe

379 просмотра

2 ответа

62 Репутация автора

Я не хочу использовать API данных, потому что у нас мало проблем.

Я хочу преобразовать DF в RDD и из RDD в текстовый файл в Java 1.7, Spark 1.6.2

Я хочу, чтобы мой dataframe был сохранен как текстовый файл, потому что я знаю, что приведенный ниже код работает, если мы используем Java 1.8

df.rdd.map(row => row.mkString("\t")).coalesce(1).saveAsTextFile("outputDirRdd")

Но я пытаюсь вставить тот же код выше с Java 1.7 Я не смог получить правильный синтаксис и поражен приведенным ниже кодом.

df.toJavaRDD().map(new Function<???,???>() {
        public ???  call(?? input) throws Exception {

        ?????

        }
    }).coalesce(1).saveAsTextFile("/s/filelocation");

Я не знаю, является ли приведенный выше код правильным или нет.

Пожалуйста, помогите мне от этого, заранее спасибо.

Автор: BadBoy777 Источник Размещён: 03.04.2017 05:00

Ответы (2)


1 плюс

3625 Репутация автора

Решение

Правильный синтаксис для использования Java 1.7 с Apache Spark для упомянутого варианта использования следующий:

df.toJavaRDD().map(new Function<Row, String>() {
                    @Override
                    public String call(Row o) throws Exception {
                        return o.mkString("\t");
                    }
                }).coalesce(1).saveAsTextFile("/s/filelocation");

Здесь Row, который является org.apache.spark.sql.Rowтипом входных данных и типом Stringвыходных данных.

callФункция будет принимать в Rowкачестве входного параметра и возврата в Stringкачестве выходного сигнала. Вот почему подпись callявляется public String call(Row o) throws Exception {}.

Автор: himanshuIIITian Размещён: 04.04.2017 05:50

0 плюса

62 Репутация автора

@ Synthe Вот как проблема решена.

Приведенный ниже мир кода привел меня к проблемам сериализации для всех его суперклассов, и есть несколько классов, где я не могу их изменить.

df.toJavaRDD().map(new Function<Row, String>() {
                public String call(Row v1) throws Exception {
                    return v1.mkString("\t");
                }
            }).saveAsTextFile("/s/filelocation");

Так что для этого обхода ниже:

df.toJavaRDD().map(new SeprateCls).saveAsTextFile("/s/filelocation");

Приведенный ниже код является создание seprateCls

public class SeprateCls implements Function<Row, String>{

private static final long serialVersionUID = -635027754589291L;

public String call(Row v1) throws Exception {
    return v1.mkString("\t");
}

}
Автор: BadBoy777 Размещён: 13.04.2017 02:53
Вопросы из категории :
32x32