我正在尝试将 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()
如果不想指定模式,请不要Row
在 RDD 中转换使用。如果您只有一个普通的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")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句