如何在不使用databricks csv api的情况下直接将CSV文件读入spark DataFrame?
我知道有databricks csv api但我不能用它来api ..
我知道有使用case类并根据cols(0)位置映射cols但问题是我有超过22种coloumns因此我不能使用case类,因为在case类中我们只有22个coloumns的限制。
我知道有structtype来定义模式,但我觉得在structype中定义40个coloumns是非常长的代码。
我正在寻找使用read方法读入数据帧的东西但是在spark中我们没有直接支持csv文件我们需要解析它吗?但如果我们有40多个cols怎么办?
答案 0 :(得分:1)
似乎scala 2.11.x以后arity limit issue已修复。请看https://issues.scala-lang.org/browse/SI-7296
要在< 2.11中解决此问题,请参阅my answer,其中使用extends Product
并覆盖方法productArity
,productElement
,canEqual (that:Any)
答案 1 :(得分:0)
我也研究了这个并最终编写了一个python脚本来生成解析(行)函数和模式定义的scala代码。是的,这可能会成为一长串代码。
如果你的数据不是太大,你可以走另一条道路:使用python pandas! 启动py-spark,将数据读入pandas数据帧,然后从中创建一个spark数据帧。保存它(例如,作为镶木地板文件)。并在scala-spark中加载该镶木地板文件。