Dataframe “如何修复”;org.apache.spark.sql.execution.datasources.orc.OrcColumnVector.getLong(OrcColumnVector.java:141)上的java.lang.NullPointerException;

Dataframe “如何修复”;org.apache.spark.sql.execution.datasources.orc.OrcColumnVector.getLong(OrcColumnVector.java:141)上的java.lang.NullPointerException;,dataframe,apache-spark,orc,Dataframe,Apache Spark,Orc,我正在尝试将dataframe中的所有列合并到一个名为value的列中 霉菌代码: val df = sparkSession.sql(sql) val dfwithValue = df.withColumn("value",df.col("topic")) dfwithValue.selectExpr("CAST(value AS STRING)").show() // no error import org.apache.spark.sql.functi

我正在尝试将dataframe中的所有列合并到一个名为
value
的列中

霉菌代码:

    val df = sparkSession.sql(sql)

    val dfwithValue = df.withColumn("value",df.col("topic"))

    dfwithValue.selectExpr("CAST(value AS STRING)").show() // no error

    import org.apache.spark.sql.functions._

    val cols = df.columns.map({ col =>
      df.col(col)
    }).toSeq

     val newdf = df.withColumn("value", struct(cols : _*))

     newdf.selectExpr("CAST(value AS STRING)").show() // error
当我使用第二种方法时,我遇到了错误

Caused by: java.lang.NullPointerException
    at org.apache.spark.sql.execution.datasources.orc.OrcColumnVector.getLong(OrcColumnVector.java:141)
    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
    at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
    at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$13$$anon$1.hasNext(WholeStageCodegenExec.scala:636)
    at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409)
    at org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:125)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:99)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:55)
    at org.apache.spark.scheduler.Task.run(Task.scala:121)
    at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:403)
    at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:409)
    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)

有人能帮忙吗?

我两种方法都没有错误,但我发现解决方案对于任务来说过于复杂。此外,此代码还返回一个数据帧,其中包含行[WarappedArray[String]]的行,而不是行[String]

尝试:


这两种方法我都不会出错,但我发现解决方案对于任务来说过于复杂。此外,此代码还返回一个数据帧,其中包含行[WarappedArray[String]]的行,而不是行[String]

尝试:


值不可访问时也会出现空指针异常,请检查变量范围以解决问题。

值不可访问时也会出现空指针异常,请检查变量范围以解决问题。

我认为此错误与sql中使用的表有关。当我在sql中使用另一个表时,这个错误就消失了。我认为这个错误与sql中使用的表有关。当我在sql中使用另一个表时,错误消失了。这并没有提供问题的答案。一旦你有足够的钱,你将能够;相反这并不能回答这个问题。一旦你有足够的钱,你将能够;相反-
df.map(_.mkString("")).toDF("value").show()