Compte tenu de la trame de données suivante étincelle:Spark: trame de données d'importation MongoDB (scala)
Name,LicenseID_1,TypeCode_1,State_1,LicenseID_2,TypeCode_2,State_2,LicenseID_3,TypeCode_3,State_3
"John","123ABC",1,"WA","456DEF",2,"FL","789GHI",3,"CA"
"Jane","ABC123",5,"AZ","DEF456",7,"CO","GHI789",8,"GA"
Comment pourrais-je utiliser scala à étincelle pour écrire ceci dans MongoDB comme collection de documents comme suit:
{ "Name" : "John",
"Licenses" :
{
[
{"LicenseID":"123ABC","TypeCode":"1","State":"WA" },
{"LicenseID":"456DEF","TypeCode":"2","State":"FL" },
{"LicenseID":"789GHI","TypeCode":"3","State":"CA" }
]
}
},
{ "Name" : "Jane",
"Licenses" :
{
[
{"LicenseID":"ABC123","TypeCode":"5","State":"AZ" },
{"LicenseID":"DEF456","TypeCode":"7","State":"CO" },
{"LicenseID":"GHI789","TypeCode":"8","State":"GA" }
]
}
}
J'ai essayé de le faire, mais a obtenu au bloc le code suivant:
val customSchema = StructType(Array(StructField("Name", StringType, true), StructField("LicenseID_1", StringType, true), StructField("TypeCode_1", StringType, true), StructField("State_1", StringType, true), StructField("LicenseID_2", StringType, true), StructField("TypeCode_2", StringType, true), StructField("State_2", StringType, true), StructField("LicenseID_3", StringType, true), StructField("TypeCode_3", StringType, true), StructField("State_3", StringType, true)))
val license = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").schema(customSchema).load("D:\\test\\test.csv")
case class License(LicenseID:String, TypeCode:String, State:String)
case class Data(Name:String, Licenses: Array[License])
val transformedData = license.map(data => Data(data(0),Array(License(data(1),data(2),data(3)),License(data(4),data(5),data(6)),License(data(7),data(8),data(9)))))
<console>:46: error: type mismatch;
found : Any
required: String
val transformedData = license.map(data => Data(data(0),Array(License(data(1),data(2),data(3)),License(data(4),data(5),data(6)),License(data(7),data(8),data(9)))))
...
s'il vous plaît être plus précis sur exactement quel problème vous avez. Peut-être poster une partie du code que vous avez déjà essayé. –
Comme vous pouvez le voir, compte tenu de la multi-colonne avec des informations similaires (trois informations de licence distinctes couvrant plusieurs colonnes), je veux importer dans mongodb comme un document avec le "Licences" comme un nom d'attribut et la valeur comme un tableau de licences de paires de valeurs de nom contenant chaque information de licence. – SYL
Avez-vous essayé d'écrire du code pour le faire? Si oui, affichez-le et indiquez où se situe le problème. Sinon, faites une tentative. –