在pyspark中将rdd转换为没有架构的数据帧

时间:2018-03-16 06:34:20

标签: apache-spark dataframe pyspark rdd

我正在尝试将rdd转换为没有任何架构的数据帧。 我试过下面的代码。它工作正常,但数据框列正在洗牌

def f(x):
    d = {}
    for i in range(len(x)):
        d[str(i)] = x[i]
    return d
rdd = sc.textFile("test")
df = rdd.map(lambda x:x.split(",")).map(lambda x :Row(**f(x))).toDF()
df.show()

1 个答案:

答案 0 :(得分:1)

如果您不想指定架构,请不要在RDD中转换使用Row。如果您只是正常RDD(而不是RDD[Row]),则可以直接使用toDF()

df = rdd.map(lambda x: x.split(",")).toDF()

您也可以使用toDF()为列添加名称,

df = rdd.map(lambda x: x.split(",")).toDF("col1_name", ..., "colN_name")

如果你拥有的是RDD[Row],你需要真正了解每列的类型。这可以通过指定模式或如下来完成

val df = rdd.map({ 
  case Row(val1: String, ..., valN: Long) => (val1, ..., valN)
}).toDF("col1_name", ..., "colN_name")