データフレームは、リレーショナルデータベースのテーブルに類似不変分散データセット、指定された列に編成されたデータのセットです。セット上の分散データ構造を適用することによって、そうデータユーザはSQLにスパークスパーク問い合わせまたは(むしろラムダより)構造車両スパーク表現方法を利用すること。
RDDに1.python間の通信
たび実行PySparkは、潜在的に仕事を行うために巨大なオーバーヘッドを必要とするように、RDDを使用しています。フィギュア
PySparkドライブ、開始Py4j JavaSparkContext JVMを使用して、スパークコンテキストで。当初のJavaにマップされたすべてのRDD変換はPythonRDD内のオブジェクト。
これらのタスクが動作ノードスパークためにプッシュしたら、PythonRDDオブジェクトは、子プロセス(サブプロセス)にパイプ(管)プロモーターのPythonを使用し、Pythonで処理するコードデータを送信します。この方法は、Pythonのサブプロセスに複数のノードを動作させる複数の分散データ処理PySparkを可能にするが、Pythonと通信オーバーヘッドとコンテキスト切り替えの間の多くのJVMがあるが。
2触媒オプティマイザリフレッシュ
一つのスパークSQLエンジンはすぐに主な理由として、触媒オプティマイザあるためです。触媒即時意義に対処するため、オプティマイザがクエリに関連している,,スパークエンジン最適化触媒コンパイルされ、最適化された論理的な計画にするだけでなく、示すように、最も効果的な物理的な計画のコスト最適化を確保するための世代:
最適化は、次の2つの目的のためにプログラムし、設計された機能的な構造に基づいています:技術的機能の最適化を容易にする新しい注文を追加するために、開発者が外部オプティマイザを(特定のルールは、データソースを追加する新しいデータ型スパークSQLをサポートするために拡張できるようにしますなど)。
3加速度Pysparkデータフレームを使用して
データフレームとRDD前センスに対する触媒オプティマイザ(タングステンプロジェクト)と最適化されていないクエリは、クエリパフォーマンスがスカラに遅いRDDの共通のクエリを使用するよりもデータフレーム、Pythonのクエリ速度のPySpark導入を増大比較します。典型的には、このクエリのパフォーマンスによるPythonとJVMの間の減少の通信オーバーヘッド。
Python DataFrame和SQL、Scala DataFrame以及R DataFrame都能够利用Catalyst优化器:
4 创建DataFrame
通常情况下,通过使用SparkSession导入数据(或者调用PySpark地shell脚本spark)来创建DataFrame。
4.1 生成JSON数据
stringJSONRDD = sc.parallelize(("""
{ "id": "123",
"name": "Katie",
"age": 19,
"eyeColor": "brown"
}""",
"""{
"id": "234",
"name": "Michael",
"age": 22,
"eyeColor": "green"
}""",
"""{
"id": "345",
"name": "Simone",
"age": 23,
"eyeColor": "blue"
}""")
)
stringJSONRDD.collect()
[out]:[' \n { "id": "123",\n "name": "Katie",\n "age": 19,\n "eyeColor": "brown"\n }',
'{\n "id": "234",\n "name": "Michael",\n "age": 22,\n "eyeColor": "green"\n }',
'{\n "id": "345",\n "name": "Simone",\n "age": 23,\n "eyeColor": "blue"\n }']
利用SparkSession read.json方法,RDD将会被转换成一个DataFrame(即spark.read.json())。
4.2 创建一个DataFrame
swimmersJSON = spark.read.json(stringJSONRDD)
swimmersJSON.show()
+---+--------+---+-------+
|age|eyeColor| id| name|
+---+--------+---+-------+
| 19| brown|123| Katie|
| 22| green|234|Michael|
| 23| blue|345| Simone|
+---+--------+---+-------+
DataFrame的转换和动作与RDD的转换和动作类似,还有一套缓慢的(转换)操作。但是,对比RDD,DataFrame操作并不是缓慢的,主要是源于Catalyst优化器。