Ich versuche eine Datei in Spark zu laden. Wenn ich eine normale Textdatei in Funken laden wie unten:Wie fügt man einem Datensatz in Spark ein Schema hinzu?
val partFile = spark.read.textFile("hdfs://quickstart:8020/user/cloudera/partfile")
Das Ergebnis ist:
partFile: org.apache.spark.sql.Dataset[String] = [value: string]
ich einen Datensatz in der Ausgabe sehen. Aber wenn ich eine Json-Datei laden:
val pfile = spark.read.json("hdfs://quickstart:8020/user/cloudera/pjson")
Das Ergebnis ist ein Datenrahmen mit einem vorgefertigten Schema:
pfile: org.apache.spark.sql.DataFrame = [address: struct<city: string, state: string>, age: bigint ... 1 more field]
Die Json/Parkett/ORC-Dateien-Schema. So kann ich verstehen, dass dies ein Feature der Spark-Version ist: 2x, was die Sache einfacher machte, da wir in diesem Fall direkt einen DataFrame bekommen und für eine normale Textdatei eine Datenmenge, wo es kein sinnvolles Schema gibt. Was ich gerne wissen würde ist, wie kann ich ein Schema zu einem Dataset hinzufügen, die eine Folge von Laden einer Textdatei in Spark ist. Für eine RDD gibt es die Option case class/StructType, um das Schema hinzuzufügen und in einen DataFrame zu konvertieren. Kann mir jemand sagen, wie kann ich es tun?
Basierend auf Ihrer Antwort, ich hatte es ein wenig zwicken. Teilen des Datasets basierend auf einem Delimiter: val partdata = partFile.map (p => p.split (",")) Ich musste auch diese Anweisung ändern: val prdt = partdata.map {line => rows (line (0) .toInt, Zeile (1) .toString, Zeile (2) .toInt, Zeile (3) .toString, Zeile (4) .toString)} weil die nicht-numerischen Daten im 'char' Format sind und ich hatte um sie in 'String' umzuwandeln. Es funktioniert jetzt. – Sidhartha
@Sidhartha, Gut zu wissen, dass es funktioniert hat. Wenn es sich um eine kommagetrennte Datei handelt, könnte man meinen ersten Vorschlag, 'spark.read.csv' zu verwenden, vielleicht einfacher finden. –