ファイルをsparkにロードしようとしています。 私は以下のようにスパークに通常のテキストファイルをロードする場合:Sparkのデータセットにスキーマを追加するには?
val partFile = spark.read.textFile("hdfs://quickstart:8020/user/cloudera/partfile")
結果は次のとおりです。
partFile: org.apache.spark.sql.Dataset[String] = [value: string]
私は出力にデータセットを見ることができます。私は、JSONファイルをロードする場合しかし:
pfile: org.apache.spark.sql.DataFrame = [address: struct<city: string, state: string>, age: bigint ... 1 more field]
JSON /寄木細工/オークのファイルが持っているスキーマ:
val pfile = spark.read.json("hdfs://quickstart:8020/user/cloudera/pjson")
成果は、既製のスキーマとデータフレームです。だから私はこれがSparkバージョンの2xの機能であることを理解できます。これは、このケースではDataFrameを直接取得し、通常のtextFileの場合は理に適っていないスキーマがないデータセットを取得します。 私が知りたいのは、sparkにtextFileをロードした結果のデータセットにスキーマを追加する方法です。 RDDの場合は、スキーマを追加してDataFrameに変換するcase class/StructTypeオプションがあります。 誰でも私にそれをどうすればいいのか教えてくれますか? dataset
/dataframe
を作成するcase class
を使用して
を、私はそれを少し微調整しなければなりませんでした。区切り文字に基づいてデータセットを分割する:val partdata = partFile.map(p => p.split( "、")) また、このステートメントを変更する必要がありました:val prdt = partdata.map {line => rows(line非数値データが 'char'形式であり、私が持っていたので、 (0).toInt、line(1).toString、line(2).toInt、line(3).toString、line(4).toString)} それらを 'String'に変換します。それは今働いている。 – Sidhartha
@シドハルタ、それがうまくいくことは知っていました。コンマで区切られたファイルの場合は、私が最初に 'spark.read.csv'を使うことを考えてみてください。それは簡単かもしれません。 –