Apache Spark-将JavaRDD转换为DataFrame,反之亦然,任何性能下降



我通过读取一个文本文件并将每一行映射到Model class属性来创建JavaRDD<Model>

然后我使用sqlContextJavaRDD<Model>转换为DataFrame

DataFrame fileDF = sqlContext.createDataFrame(javaRDD, Model.class);

基本上,我们正在尝试使用DataFrame API来提高性能和易写性。

在将DataFrame转换为JavaRDD时,是否存在任何性能下降,或者是否会再次创建模型对象。

我这样做的原因是,我没有看到任何直接使用sqlContext读取文本文件的方法。

有其他有效的方法吗?

它会更慢吗

肯定会有一些开销,尽管我没有衡量多少。为什么?因为createDataFrame必须:

  • 使用反射获取DataFrame的模式(整个RDD一次)
  • 将RDD中的实体映射到行记录(使其符合数据帧格式)-N次,RDD中每个实体一次
  • 创建实际的CCD_ 7对象

这有关系吗

我怀疑。反射会很快,因为它只是一个物体,而那里可能只有几个场。

转型会缓慢吗?同样可能没有,因为每个记录只有几个字段可以迭代。

替代方案

但是,如果您没有将该RDD用于其他任何事情,那么DataFrameReader类中有几个选项,可以通过SQLContext.read():访问

  • json:这里有几种方法
  • 镶木地板:在这里
  • text:此处

关于1和2的好处是你得到了一个实际的模式。最后一个方法是,您传递文件的路径(与其他两种方法一样),但由于没有指定格式,Spark没有任何关于模式的信息->文件中的每一行都被视为DF中的新行,其中包含整行的单列value

如果您有一个允许创建模式的格式的文本文件,例如CSV,您可以尝试使用第三方库,如Spark CSV。

相关内容

  • 没有找到相关文章

最新更新