我无法将json数据推入配置单元,下面是示例json数据和我的工作。请给我推荐丢失的那个
json数据
{
"Employees" : [
{
"userId":"rirani",
"jobTitleName":"Developer",
"firstName":"Romin",
"lastName":"Irani",
"preferredFullName":"Romin Irani",
"employeeCode":"E1",
"region":"CA",
"phoneNumber":"408-1234567",
"emailAddress":"romin.k.irani@gmail.com"
},
{
"userId":"nirani",
"jobTitleName":"Developer",
"firstName":"Neil",
"lastName":"Irani",
"preferredFullName":"Neil Irani",
"employeeCode":"E2",
"region":"CA",
"phoneNumber":"408-1111111",
"emailAddress":"neilrirani@gmail.com"
},
{
"userId":"thanks",
"jobTitleName":"Program Directory",
"firstName":"Tom",
"lastName":"Hanks",
"preferredFullName":"Tom Hanks",
"employeeCode":"E3",
"region":"CA",
"phoneNumber":"408-2222222",
"emailAddress":"tomhanks@gmail.com"
}
]
}
我尝试使用sqlcontext和jsonfile方法来加载,但未能解析json
val f = sqlc.jsonFile("file:///home/vm/Downloads/emp.json")
f.show
error is : java.lang.RuntimeException: Failed to parse a value for data type StructType() (current token: VALUE_STRING)
我尝试了不同的方法,并且能够破解并获得模式
val files = sc.wholeTextFiles("file:///home/vm/Downloads/emp.json")
val jsonData = files.map(x => x._2)
sqlc.jsonRDD(jsonData).registerTempTable("employee")
val emp= sqlc.sql("select Employees[1].userId as ID,Employees[1].jobTitleName as Title,Employees[1].firstName as FirstName,Employees[1].lastName as LastName,Employees[1].preferredFullName as PeferedName,Employees[1].employeeCode as empCode,Employees[1].region as Region,Employees[1].phoneNumber as Phone,Employees[1].emailAddress as email from employee")
emp.show // displays all the values
我能够分别获得每个记录的数据和模式,但我缺少一个想法,即获取所有数据并加载到配置单元中。
任何帮助或建议都是值得的。
2条答案
按热度按时间ngynwnxp1#
这是破解的答案
任何优化上述代码的建议。
vs3odd8k2#
当文件每行包含一个json对象时,sparksql只支持读取json文件。
sqlcontext.scala文件
您的文件应该是这样的(严格地说,它不是一个正确的json文件)
请看一下尚未解决的jira问题。别认为这是优先考虑的,但要记录在案。
你有两个选择
将json数据转换为支持的格式,每行一个对象
每个json对象有一个文件-这将导致文件过多。
请注意
SQLContext.jsonFile
已弃用,请使用SQLContext.read.json
.spark文档中的示例