Spark RDDをDataFrameに変換しようとしています。スキームがsqlContext.CreateDataFrame(rdd,schema)
関数に渡されるドキュメントと例を見てきました。
しかし、38の列またはフィールドがあり、これはさらに増加します。各フィールド情報を指定するスキーマを手動で指定すると、非常に面倒な作業になります。
列の情報を事前に知らずにスキーマを指定する他の方法はありますか。
見る、
SparkでRDDをDFに変換するには2つの方法があります。
toDF()
およびcreateDataFrame(rdd, schema)
これを動的に行う方法を紹介します。
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()
これにより、データフレームを動的に作成できるようになります。
他の方法は、動的スキーマを作成することです。どうやって?
こちらです:
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番目の方法はそれを行うのにきれいです...
これが、データフレームを動的に作成する方法です。
それがうまくいくなら試してみてください
sc = spark.sparkContext
# Infer the schema, and register the DataFrame as a table.
schemaPeople = spark.createDataFrame(RddName)
schemaPeople.createOrReplaceTempView("RddName")