Spark RDD到DataFrame python

发布于 2021-01-29 19:35:27

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

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

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

关注者
0
被浏览
67
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    看到,

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

    第二种方法更清洁…

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看