看到,
在Spark中有两种将RDD转换为DF的方法。
toDF()
和 createDataFrame(rdd, schema)
我将向您展示如何动态地做到这一点。
该toDF()
命令为您提供了将转换RDD[Row]
为数据框的方法。关键是,对象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)
第二种方法更清洁…
这样便可以动态创建数据框。