2017-06-25 57 views
0

用咸菜,我想了解PySpark如何使用咸菜RDDS,避免它SparkSql和Dataframes。这个问题的基础是来自this链接的第30张幻灯片。我在下面引用它作为参考:PySpark如何在SparkSql和Dataframes

“[PySpark] RDD通常是pickle对象的RDD,Spark SQL(和DataFrames)避免了这些”。

Spark中的Sql如何使用咸菜?

回答

2

在原来的火花RDD模型,RDDS描述分布式Java对象或腌渍Python对象的集合。然而,SparkSQL“数据框”(包括数据集)代表查询针对一个或多个来源/父母。

评估查询,并产生了一些成绩,星火确实需要处理记录和字段,但这些都是以二进制,语言无关的格式(称为“编码”)内部表示。 Spark可以在需要时将这些格式解码为任何支持的语言(例如Python,Scala,R),但如果不明确需要,可以避免这样做。

例如:如果我有磁盘上的一个文本文件,我想算行,我用像一个电话:

spark.read.text("/path/to/file.txt").count()

没有必要火花不断转换将文本中的字节转换为Python字符串--Spark只需要对它们进行计数。

或者,如果我们没有从PySpark一个spark.read.text("...").show(),然后星火需要一些记录转换为Python字符串 - 但只需要那些满足查询,并show()意味着限制,以便只有几个记录被评估和“解码”。总之,使用SQL/DataFrame/DataSet APIs,用来操纵查询的语言(Python/R/SQL/...)仅仅是一种“前端”控制语言,它并不是语言在其中执行实际计算,也不需要将原始数据源转换为您正在使用的语言。这种方法可以在所有语言前端实现更高的性能。

+0

谢谢Adam。发布编码器的参考https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-sql-Encoder.html – user24225