[英]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) DataFrame
对象。 这有关系吗?
我对此表示怀疑。 反射将非常快,因为它只是一个对象而你可能只有少数几个字段。
转型会变慢吗? 再一次可能没有,因为每个记录只有几个字段可以迭代。
备择方案
但是如果你没有将RDD用于其他任何东西,你可以在DataFrameReader类中有一些选项,可以通过SQLContext.read()
访问SQLContext.read()
:
关于1和2的好处是你得到了一个实际的架构。 最后一个,您将路径传递给该文件(与其他两个方法一样),但由于未指定格式,因此Spark没有关于模式的任何信息 - >文件中的每一行都被视为DF中的新行使用包含整行的单个列value
。
如果您的文本文件格式允许创建架构(例如CSV),则可以尝试使用第三方库,例如Spark CSV 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.