Scala在尝试创建具有超过255列的RDD时获得java异常

时间:2018-06-01 05:29:00

标签: scala apache-spark apache-spark-sql

我有一个包含近600列的庞大数据集,但是,当我尝试创建DF时,它失败了

Exception in thread "main" java.lang.ClassFormatError: Too many arguments in method signature in class file

示例代码:

def main(args: Array[String]): Unit = {
  val data = sc.textFile(file);
  val rd = data.map(line => line.split(",")).map(row => new Parent(row(0), row(1), ........row(600)))
  rd.toDF.write.mode("append").format("orc").insertInto("Table")
}

有人可以帮忙解决此问题吗?

1 个答案:

答案 0 :(得分:2)

我认为Java对象的最大方法参数存在限制,因此也扩展到Scala对象。具有600个参数的人员类是不可行的。

最理想的解决方案是将csv本身读为:

spark.read.csv(filePath)

此外,您可以选择使用签名增加maxColumns选项。

spark.read.options().csv() 

虽然它不会直接影响您的用例,但max-columns设置为20480.可以找到有关这些参数的更多信息here