【问题标题】:convert rdd to dataframe without schema in pyspark在pyspark中将rdd转换为没有模式的数据框
【发布时间】:2018-08-25 03:43:38
【问题描述】:

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

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

【问题讨论】:

  • 您可以将数据作为数据帧读取,而不是转换 rdd。
  • 洗牌是什么意思?
  • 列的顺序被打乱了@ramesh
  • 是的,但我需要转换的 rdd 会与其他更改一起处理。@shaido
  • 您的解决方案不适用于实际数据,因为您将值用作列名,并且每行将具有不同的值。我同意@Shaido 关于使用 sqlContext 的评论,因为它将使用第一行作为标题

标签: apache-spark dataframe pyspark rdd


【解决方案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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多