我是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
答案 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)