web-dev-qa-db-ja.com

Spark RDD to DataFrame python

Spark RDDをDataFrameに変換しようとしています。スキームがsqlContext.CreateDataFrame(rdd,schema)関数に渡されるドキュメントと例を見てきました。

しかし、38の列またはフィールドがあり、これはさらに増加し​​ます。各フィールド情報を指定するスキーマを手動で指定すると、非常に面倒な作業になります。

列の情報を事前に知らずにスキーマを指定する他の方法はありますか。

29
Jack Daniel

見る、

SparkでRDDをDFに変換するには2つの方法があります。

toDF()およびcreateDataFrame(rdd, schema)

これを動的に行う方法を紹介します。

toDF()

toDF()コマンドは、RDD[Row]をDataframeに変換する方法を提供します。ポイントは、オブジェクトRow()**kwargs引数を受け取ることができるということです。そのため、それを行う簡単な方法があります。

from pyspark.sql.types import Row

#here you are going to create a function
def f(x):
    d = {}
    for i in range(len(x)):
        d[str(i)] = x[i]
    return d

#Now populate that
df = rdd.map(lambda x: Row(**f(x))).toDF()

これにより、データフレームを動的に作成できるようになります。

createDataFrame(rdd、スキーマ)

他の方法は、動的スキーマを作成することです。どうやって?

こちらです:

from pyspark.sql.types import StructType
from pyspark.sql.types import StructField
from pyspark.sql.types import StringType

schema = StructType([StructField(str(i), StringType(), True) for i in range(32)])

df = sqlContext.createDataFrame(rdd, schema)

この2番目の方法はそれを行うのにきれいです...

これが、データフレームを動的に作成する方法です。

59
Thiago Baldim

それがうまくいくなら試してみてください

sc = spark.sparkContext

# Infer the schema, and register the DataFrame as a table.
schemaPeople = spark.createDataFrame(RddName)
schemaPeople.createOrReplaceTempView("RddName")
2
Arun Sharma