小编典典

Spark RDD到DataFrame python

python

我正在尝试将Spark
RDD转换为DataFrame。我已经看到了将方案传递给sqlContext.CreateDataFrame(rdd,schema)函数的文档和示例 。

但是我有38列或字段,并且这将进一步增加。如果我手动给出指定每个字段信息的架构,那将是一件非常繁琐的工作。

还有其他方法可以指定模式,而无需事先了解各列的信息。


阅读 185

收藏
2020-12-20

共1个答案

小编典典

看到,

在Spark中有两种将RDD转换为DF的方法。

toDF()createDataFrame(rdd, schema)

我将向您展示如何动态地做到这一点。

toDF()

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()

这样,您将能够动态创建数据框。

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)

第二种方法更清洁…

这样便可以动态创建数据框。

2020-12-20