パンダ | スパーク | |
仕事 | 単一工作機械シングル、何の並列処理の並列性が存在しない のHadoopをサポートしていない、大規模なデータのボトルネック |
分散コンピューティングフレームワークを平行、並列並列は、クラスタノード間で分散自動並列のすべてのデータおよび操作を内蔵しました。メモリ内のデータに対する分散データ処理を処理します。 Hadoopのためのサポートは、大量のデータを扱うことができます |
遅延機構 | レイジー評価されていません | レイジーに評価 |
メモリキャッシュ | スタンドアロンキャッシュ | 持続()またはキャッシュ()メモリに格納されたRDDSを変換 |
データフレームの変動 | パンダは、データフレームで可変です | スパークRDDSは不変であるため、変更可能なデータフレームではありません |
作ります | spark_dfから変換:pandas_df = spark_df.toPandas() | pandas_dfから変換:spark_df = SQLContext.createDataFrame(pandas_df) また、createDataFrameは、リスト要素がタプル、辞書、RDDとすることができるリスト変換spark_df、から支持しました |
リスト、辞書、ndarray変換 | 既存のRDDSの変換 | |
読書CSVデータセット | 構造化データファイルの読み込み | |
HDF5読み取り | データセットは、JSONを読みます | |
EXCEL読みます | ハイブテーブル読み出し | |
外部データベースを読み込みます | ||
インデックスindex | 自動的に作成 | いいえインデックスインデックスは、追加の列の必要性を作成する必要がない場合 |
ライン構造 | パンダデータフレームに属するシリーズ構造、構造 | 行構造、構造属するスパークDATAFRAME |
カラム構造 | パンダデータフレームに属するシリーズ構造、構造 | データフレーム[名:文字列]のようなスパークデータフレーム構造を、属する列の構造、 |
列名 | 名前の重複を許可しません | 重複した名前が許可 メソッドの別名を使用して列を変更します |
列の追加 | DF [「XX」] = 0 | df.withColumn(「XX」、0).SHOW()会报错 pyspark.sqlインポート機能から df.withColumn(「XX」、functions.lit(0))。(表示) |
[変更]列 | その存在DF [ "XX"]カラム、DF [ "XX"] = 1 | その存在DF [ "XX"]カラム、df.withColumn( "XX"、1).SHOW() |
ディスプレイ | DFは出力しない具体的な内容、出力方法を表示することにより、特定のコンテンツ行い 、出力形式:データフレームを[年齢:BIGINT、名前 :文字列] |
|
DF出力の特定のコンテンツ | df.show()出力の詳細 | |
出力の形式でませツリー構造ません | df.printSchema():ツリープリント要約の形で | |
df.collect() | ||
シーケンス | df.sort_index()軸でソート | |
df.sort()は、列の値によってソートされ | df.sort()は、列の値によってソートされ | |
選択またはスライス | df.name出力特定のコンテンツ | DF []は、表示出力方法と、特定のコンテンツの出力の特定のコンテンツない DF [「名前」]は出力固有のコンテンツ、出力方法を示しによって特定のコンテンツありません |
DF []出力特定のコンテンツ、 DF [「名前」]出力の詳細 |
df.select()1つ以上の列を選択します ( "名前")をdf.select スライスdf.select(DF [ '名前'] 、DF [ '年齢'] + 1) |
|
DF [0] df.ix [0] |
df.first() | |
df.head(2) | df.head(2)またはdf.take(2) | |
df.tail(2) | ||
スライスdf.ix [3]又はdf.ix [ "XX"]またはDF [ "XX"] | ||
df.loc []タブで選択されています | ||
df.iloc []の位置によって選択されます | ||
濾過 | df[df[‘age’]>21] | df.filter(df[‘age’]>21) 或者 df.where(df[‘age’]>21) |
整合 | df.groupby(“age”) df.groupby(“A”).avg(“B”) |
df.groupBy(“age”) df.groupBy(“A”).avg(“B”).show() 应用单个函数 from pyspark.sql import functions df.groupBy(“A”).agg(functions.avg(“B”), functions.min(“B”), functions.max(“B”)).show() 应用多个函数 |
统计 | df.count() 输出每一列的非空行数 | df.count() 输出总行数 |
df.describe() 描述某些列的count, mean, std, min, 25%, 50%, 75%, max | df.describe() 描述某些列的count, mean, stddev, min, max | |
合并 | Pandas下有concat方法,支持轴向合并 | |
Pandas下有merge方法,支持多列合并 同名列自动添加后缀,对应键仅保留一份副本 |
Spark下有join方法即df.join() 同名列不自动添加后缀,只有键值完全匹配才保留一份副本 |
|
df.join() 支持多列合并 | ||
df.append() 支持多行合并 | ||
缺失数据处理 | 对缺失数据自动添加NaNs | 不自动添加NaNs,且不抛出错误 |
fillna函数:df.fillna() | fillna函数:df.na.fill() | |
dropna函数:df.dropna() | dropna函数:df.na.drop() | |
SQL语句 | import sqlite3 pd.read_sql(“SELECT name, age FROM people WHERE age >= 13 AND age <= 19”) |
表格注册:把DataFrame结构注册成SQL语句使用类型 df.registerTempTable(“people”) 或者 sqlContext.registerDataFrameAsTable(df, “people”) sqlContext.sql(“SELECT name, age FROM people WHERE age >= 13 AND age <= 19”) |
功能注册:把函数注册成SQL语句使用类型 sqlContext.registerFunction(“stringLengthString”, lambda x: len(x)) sqlContext.sql(“SELECT stringLengthString(‘test’)”) |
||
两者互相转换 | pandas_df = spark_df.toPandas() | spark_df = sqlContext.createDataFrame(pandas_df) |
函数应用 | df.apply(f)将df的每一列应用函数f | df.foreach(f) 或者 df.rdd.foreach(f) 将df的每一列应用函数f df.foreachPartition(f) 或者 df.rdd.foreachPartition(f) 将df的每一块应用函数f |
map-reduce操作 | map(func, list),reduce(func, list) 返回类型seq | df.map(func),df.reduce(func) 返回类型seqRDDs |
diff操作 | 有diff操作,处理时间序列数据(Pandas会对比当前行与上一行) | 没有diff操作(Spark的上下行是相互独立,分布式存储的) |
パンダと比較してデータフレームをスパーク
おすすめ
転載: blog.csdn.net/weixin_43064185/article/details/103909256
おすすめ
ランキング