【发布时间】:2019-04-27 21:48:25
【问题描述】:
我假设 Spark 数据帧是从 RDD 构建的。但是,我最近了解到情况并非如此,Difference between DataFrame, Dataset, and RDD in Spark 很好地解释了它们不是。
那么将 RDD 转换为 DataFrame 并再转换回来的开销是多少?是微不足道还是重要?
在我的应用程序中,我通过将文本文件读入 RDD,然后使用返回 Row() 对象的 map 函数对每一行进行自定义编码来创建 DataFrame。我不应该这样做吗?有没有更有效的方法?
【问题讨论】:
-
好吧,您可以使用
SparkSession.read.text("file"),但仍需要将每一行解析为类型化列。 -
@cricket_007 是的,我可以这样做,但是使用它还是采用 RDD 方法更有效?
-
我认为这取决于输入格式。例如,json、avro、parquet 等具有明确定义的模式和类型...... Xml 或 csv 只是作为字符串读取,并且需要一些解析和转换为适当的数据类型才能使 Dataset 对象正常工作。就个人而言,我更喜欢从 Row 对象开始,然后在需要时构建 Dataset 模式,但我想不出你会回到 RDD 的情况
-
我们的输出格式是管道分隔的文本文件。
-
那么最好使用
spark.read.option("delimiter", "|").csv("file")作为DataFrame。
标签: apache-spark