Spark RDD to DataFrame python



我正在尝试将Spark RDD转换为数据框架。我已经看到了文件和例子,其中方案被传递到sqlContext.CreateDataFrame(rdd,schema)函数。

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

是否有其他方法可以指定模式而不知道先前列的信息

看,

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

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(抽样模式)

另一种方法是创建一个动态模式。如何?

:

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)

第二种方法更简洁…

我更喜欢Arun的答案,但是有一个小问题,我无法评论或编辑答案。sparkContext没有createDeataFrame, sqlContext有(正如Thiago提到的)。所以:

from pyspark.sql import SQLContext
# assuming the spark environemnt is set and sc is spark.sparkContext 
sqlContext = SQLContext(sc)
schemaPeople = sqlContext.createDataFrame(RDDName)
schemaPeople.createOrReplaceTempView("RDDName")

试试是否可以

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

相关内容

  • 没有找到相关文章

最新更新