Получение исключения Null Pointer при выполнении операций с искрой датафрейма - PullRequest
0 голосов
/ 17 мая 2018

Я использую следующий код для создания фрейма данных из RDD.Я могу выполнять операции на СДР, и СДР не является пустым.

Я опробовал следующие два подхода.С обоими я получаю одно и то же исключение.

Подход 1: Создание набора данных с использованием sparkSession.createDataframe ().

System.out.println("RDD Count: " + rdd.count());
        Dataset<Row> rows = applicationSession
                .getSparkSession().createDataFrame(rdd,  data.getSchema()).toDF(data.convertListToSeq(data.getColumnNames()));
        rows.createOrReplaceTempView(createStagingTableName(sparkTableName));
        rows.show();
        rows.printSchema();

Подход 2: Использование Hive Context для создания набора данных.

System.out.println("RDD Count: " + rdd.count());
    System.out.println("Create view using HiveContext..");
    Dataset<Row> rows = applicationSession.gethiveContext().applySchema(rdd, data.getSchema());

Я могу напечатать схему для вышеуказанного набора данных, используя оба аппроксимации.Не уверен, что именно вызывает исключение нулевого указателя.

Метод Show () внутренне вызывает метод take (), который вызывает исключение нулевого указателя.Но почему этот набор данных заполнен как NULL?если СДР содержит значения, то он не должен быть нулевым.

Это странное поведение.

Ниже приведены журналы для одного и того же.

RDD Count: 35

Также я могуЗапустите вышеуказанный код в локальном режиме без каких-либо исключений, он работает нормально.

Как только я разверну этот код на Yarn, я получу следующее исключение.

Я могу создать фрейм данных, даже если явозможность зарегистрировать вид для того же.Как только я выполняю операции rows.show () или rows.count () с этим набором данных, я получаю следующую ошибку.

Driver stacktrace:
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1517)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1505)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1504)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
    at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1504)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:814)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:814)
    at scala.Option.foreach(Option.scala:257)
    at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:814)
    at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:1732)
    at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1687)
    at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1676)
    at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48)
    at org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:630)
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:2029)
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:2050)
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:2069)
    at org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:336)
    at org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:38)
    at org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$collectFromPlan(Dataset.scala:2861)
    at org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:2150)
    at org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:2150)
    at org.apache.spark.sql.Dataset$$anonfun$55.apply(Dataset.scala:2842)
    at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:65)
    at org.apache.spark.sql.Dataset.withAction(Dataset.scala:2841)
    at org.apache.spark.sql.Dataset.head(Dataset.scala:2150)
    at org.apache.spark.sql.Dataset.take(Dataset.scala:2363)
    at org.apache.spark.sql.Dataset.showString(Dataset.scala:241)
    at org.apache.spark.sql.Dataset.show(Dataset.scala:637)
    at org.apache.spark.sql.Dataset.show(Dataset.scala:596)
    at org.apache.spark.sql.Dataset.show(Dataset.scala:605)
Caused by: java.lang.NullPointerException
    at org.apache.spark.sql.SparkSession$$anonfun$3.apply(SparkSession.scala:469)
    at org.apache.spark.sql.SparkSession$$anonfun$3.apply(SparkSession.scala:469)
    at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
    at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:235)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:228)
    at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:827)
    at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:827)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
    at org.apache.spark.scheduler.Task.run(Task.scala:108)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:338)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Я что-то здесь не так делаю?Пожалуйста, предложите.

1 Ответ

0 голосов
/ 18 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...