gpt4 book ai didi

java - Apache Spark - 将 JavaRDD 转换为 DataFrame,反之亦然,性能会下降吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:12 28 4
gpt4 key购买 nike

我正在创建 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()访问的类:

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

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

关于java - Apache Spark - 将 JavaRDD 转换为 DataFrame,反之亦然,性能会下降吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34737501/

28 4 0