私はzeppelinノートブックで作業していて、SQLを使用してテーブルからデータをロードしようとしています。 表内の各行には、JSONブロブである1つの列があります。たとえば、[{'timestamp':12345,'value':10},{'timestamp':12346,'value':11},{'timestamp':12347,'value':12}]
spark sqlを使用してJson WrappedArrayを文字列に変換します
元の文字列のように、JSON BLOBを文字列として選択したいとします。しかし、自動的にWrappedArrayとしてロードされます。
WrappedArrayを文字列に変換するためにUDFを記述する必要があるようです。以下は私のコードです。
まず、Scala関数を定義して関数を登録します。そして列に登録された関数を使用します。
val unwraparr = udf ((x: WrappedArray[(Int, Int)]) => x.map { case Row(val1: String) => + "," + val2 })
sqlContext.udf.register("fwa", unwraparr)
これは機能しません。誰でも手伝っていただければ幸いです。
以下は、私が取り組んでいる部分のスキーマです。量とタイムスタンプのペアがたくさんあります。
-- targetColumn: array (nullable = true)
|-- element: struct (containsNull = true)
| |-- value: long (nullable = true)
| |-- timeStamp: string (nullable = true)
UPDATE:私はそれが単一の文字列にオブジェクト/構造体/行(構造体を呼び出す方法がわからないが)CONCATする必要が
val f = (x: Seq[Row]) => x.map { case Row(val1: Long, val2: String) => x.mkString("+") }
: 私は、次のコードを思い付きます。
'dataframe'の' schema'で更新できますか? 'dataframe.printSchema()'の出力を貼り付けてコピーするだけです。 –
@RameshMaharjan更新されました。ありがとう! – Ryan
希望の出力を更新してください。 –