Spark RDD 到 DataFrame python
Spark RDD to DataFrame python
我正在尝试将 Spark RDD 转换为 DataFrame。我已经看到了将方案传递给的文档和示例
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(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)
第二种方法更干净...
这就是动态创建数据帧的方法。
尝试一下是否有效
sc = spark.sparkContext
# Infer the schema, and register the DataFrame as a table.
schemaPeople = spark.createDataFrame(RddName)
schemaPeople.createOrReplaceTempView("RddName")
我更喜欢 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")
我正在尝试将 Spark RDD 转换为 DataFrame。我已经看到了将方案传递给的文档和示例
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(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)
第二种方法更干净...
这就是动态创建数据帧的方法。
尝试一下是否有效
sc = spark.sparkContext
# Infer the schema, and register the DataFrame as a table.
schemaPeople = spark.createDataFrame(RddName)
schemaPeople.createOrReplaceTempView("RddName")
我更喜欢 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")