Spark RDD的架构定义

时间:2016-05-16 02:05:46

标签: python apache-spark

我是Python Spark的新手。我有以下火花数据框架& json对象

df = sqlContext.read.load("result.json", format="json")

Json对象:

df.collect() 

[Row(Dorothy=[u'CA', u'F', u'1910', u'220'], Frances=[u'CA', u'F', u'1910', u'134'], Helen=[u'CA', u'F', u'1910', u'239'], Margaret=[u'CA', u'F', u'1910', u'163'], Mary=[u'CA', u'F', u'1910', u'295'])]

当我尝试将字段名称分配给上面的值时

df.select(Row("Name" =["State","Gender","Year","Count"])).write.save("result.json",format = 'json')

我收到错误,低于错误。您能否帮助您了解如何为上述datafrmae定义架构

Py4JError: An error occurred while calling z:org.apache.spark.sql.functions.col. Trace:py4j.Py4JException: Method col([class java.util.ArrayList]) does not exist

1 个答案:

答案 0 :(得分:1)

加载json文档后,您已经拥有了架构,因此您可以执行df.printSchema(),因此您不需要使用Row类。

所以你应该可以做一些像

这样的事情
df.select(df['State'], df['Gender'], df['Year'], df['Count'])

df.select('State', 'Gender', 'Year', 'Count')

当您使用Row类时,您将键值对作为命名参数传递,例如

rows = [Row(name='John', age=10)]

用于构建包含行列表的dataFrame,例如

df = sqlContext.createDataFrame(rows)