pySpark 1.6.1で行を動的に作成しようとしていて、データフレームに構築しようとしています。一般的な考え方は、describe
の結果を、例えばスキューおよび尖度を含むように拡張することである。pySparkのdictから行を構築する
from pyspark.sql import Row
row_dict = {'C0': -1.1990072635132698,
'C3': 0.12605772684660232,
'C4': 0.5760856026559944,
'C5': 0.1951877800894315,
'C6': 24.72378589441825,
'summary': 'kurtosis'}
new_row = Row(row_dict)
しかし、これはかなり明確な誤りであるTypeError: sequence item 0: expected string, dict found
を返します。ここでは、私が動作するはずと思ったものです。私は動的に内のフィールドを指定することができるように、それはいないようです除く細かいステップ、だろう
r = Row('summary', 'C0', 'C3', 'C4', 'C5', 'C6')
r(row_dict)
> Row(summary={'summary': 'kurtosis', 'C3': 0.12605772684660232, 'C0': -1.1990072635132698, 'C6': 24.72378589441825, 'C5': 0.1951877800894315, 'C4': 0.5760856026559944})
:それから私は私が最初の行のフィールドを定義した場合、私は辞書を使用できることを見出しました。不明な名前の行が不明な場合には、これが必要です。ドキュメントによれば、あなたは実際には逆に行くことができます:
>>> Row(name="Alice", age=11).asDict() == {'name': 'Alice', 'age': 11}
True
私はこれを行うことができるはずです。また、これを許可した古いバージョンのいくつかの非難された機能があるかもしれません。たとえば、here。私が行方不明になっている現在の同等物はありますか?
これはPythonの特定のバージョンで有効ですか、それとも一般的なルールですか?私が求めているのはあなたの[最新の編集](https://stackoverflow.com/posts/38253641/revisions)です。 – eliasah
@eliasah Sparkは常に内部的にソートするので、それ以前に行ったことは問題ではありません。そして、JIRAの議論では、SparkがPython <3.6をサポートしなくなるまでは変更されません。 OrderedDictは少し誤解を招いていたので、削除しました。 – zero323
ありがとう!それが私の混乱の原因でした。 – eliasah