2017-09-29 3 views
0

に変換します。この構造型は1000以上のフィールドで構成されています。すべてのフィールド型は文字列です。構造体型のすべてのフィールドを配列

root 
|-- mac: string (nullable = true) 
|-- kv: struct (nullable = true) 
| |-- FTP_SERVER_ANAUTHORIZED_FEAT_B64: string (nullable = true) 
| |-- FTP_SERVER_ANAUTHORIZED_FEAT_CODE: string (nullable = true) 
| |-- FTP_SERVER_ANAUTHORIZED_HELP_B64: string (nullable = true) 
| |-- FTP_SERVER_ANAUTHORIZED_HELP_CODE: string (nullable = true) 
| |-- FTP_SERVER_ANAUTHORIZED_SYST_B64: string (nullable = true) 
| |-- FTP_SERVER_ANAUTHORIZED_SYST_CODE: string (nullable = true) 
| |-- FTP_SERVER_HELLO_B64: string (nullable = true) 
| |-- FTP_STATUS_HELLO_CODE: string (nullable = true) 
| |-- HTML_LOGIN_FORM_ACTION_0: string (nullable = true) 
| |-- HTML_LOGIN_FORM_DETECTION_0: string (nullable = true) 
| |-- HTML_LOGIN_FORM_INPUT_PASSWORD_NAME_0: string (nullable = true) 
| |-- HTML_LOGIN_FORM_INPUT_TEXT_NAME_0: string (nullable = true) 
| |-- HTML_LOGIN_FORM_METHOD_0: string (nullable = true) 
| |-- HTML_REDIRECT_TYPE_0: string (nullable = true) 

私は非ヌルフィールドと非ヌルフィールドの一部の識別子のみを選択します。とにかく、各要素を明示的に参照することなく、この構造体を配列に変換する方法はありますか?

+0

_「非nullであるフィールドだけを選択し、」_行あたりのすべての行または列全体に?結果はどうあるべきですか?データセットにはどのように多くのフィールドが必要ですか? nullでないフィールドの数はどれくらいですか? 1つは別の構造体ですか? –

+0

理想的には、完全なデータの疎な表現です。したがって、行ごとに、null以外の値が存在するはずです(field_k:val1、field_l:val2、...、field_n:valx) – user2291165

答えて

1

私はudfを使用したい:

from pyspark.sql.types import * 
from pyspark.sql.functions import udf 

as_array = udf(
    lambda arr: [x for x in arr if x is not None], 
    ArrayType(StringType())) 


df.withColumn("arr", as_array(df["kv"]))) 
関連する問題