3.2 从 RDD 创建
未指定列名:
rdd = sc.parallelize([('Alice', 1)])
spark_session.createDataFrame(rdd).collect()
结果为:
[Row(_1=u'Alice', _2=1)] #自动分配列名
指定列名:
rdd = sc.parallelize([('Alice', 1)])
spark_session.createDataFrame(rdd, ['name', 'age']).collect()
结果为:
[Row(name=u'Alice', age=1)]
通过
Row
来创建:from pyspark.sql import Row
Person = Row('name', 'age')
rdd = sc.parallelize([('Alice', 1)]).map(lambda r: Person(*r))
spark_session.createDataFrame(rdd, ['name', 'age']).collect()
结果为:
[Row(name=u'Alice', age=1)]
指定
schema
:from pyspark.sql.types import *
schema = StructType([
StructField("name", StringType(), True),
StructField("age", IntegerType(), True)])
rdd = sc.parallelize([('Alice', 1)])
spark_session.createDataFrame(rdd, schema).collect()
结果为:
[Row(name=u'Alice', age=1)]
通过字符串指定
schema
:rdd = sc.parallelize([('Alice', 1)])
spark_session.createDataFrame(rdd, "a: string, b: int").collect()
结果为:
[Row(name=u'Alice', age=1)]
如果只有一列,则字符串
schema
为:rdd = sc.parallelize([1])
spark_session.createDataFrame(rdd, "int").collect()
结果为:
[Row(value=1)]