繁体   English   中英

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

[英]Apache Spark - Converting JavaRDD to DataFrame and vice versa, any performance degradation?

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

那么我转换JavaRDD<Model>DataFrame使用sqlContext

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

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

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

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

有没有其他有效的方法来做到这一点?

会慢吗?

肯定会有一些开销,虽然我没有基准测试多少。 为什么? 因为createDataFrame必须:

  • 使用反射来获取DataFrame的模式(一次用于整个RDD)
  • 将RDD中的实体映射到行记录(因此它符合数据帧格式) - N时间,RDD中每个实体一次
  • 创建实际的DataFrame对象。

这有关系吗?

我对此表示怀疑。 反射将非常快,因为它只是一个对象而你可能只有少数几个字段。

转型会变慢吗? 再一次可能没有,因为每个记录只有几个字段可以迭代。

备择方案

但是如果你没有将RDD用于其他任何东西,你可以在DataFrameReader类中有一些选项,可以通过SQLContext.read()访问SQLContext.read()

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

如果您的文本文件格式允许创建架构(例如CSV),则可以尝试使用第三方库,例如Spark CSV

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM