PySpark-将DF列合并为命名的StructType

时间:2018-08-14 16:34:51

标签: python database dataframe pyspark

我希望将PySpark数据帧的多列合并到StructType的一列中。

假设我有一个这样的数据框:

columns = ['id', 'dogs', 'cats']
vals = [(1, 2, 0),(2, 0, 1)]
df = sqlContext.createDataFrame(vals, columns)

我希望生成的数据框类似于此(不是像它实际打印的那样,而是让您了解如果您不熟悉StructType的意思):

id | animals
1  | dogs=2, cats=0
2  | dogs=0, cats=1

现在,我可以完成以下任务:

StructType(
    [StructField('dogs', IntegerType(), True),
    [StructField('cats', IntegerType(), True)
)

在我的udf末尾,我宁愿只使用一个函数来完成它。如果不存在,我会感到惊讶。

1 个答案:

答案 0 :(得分:2)

如果您需要 I'm getting the error 1) JavascriptController#show When the javascript can't be found returns an error Failure/Error: javascript = Javascript.find(params[:id]) ActiveRecord::RecordNotFound: Couldn't find Javascript with 'id'=blahdeblah :创建以列名作为键的文字列,然后使用create_map函数构造所需的地图列:

map

如果您需要from pyspark.sql.functions import create_map, lit new_df = df.select( 'id', create_map(lit('dogs'), 'dogs', lit('cats'), 'cats').alias('animals') # key : val, key : val ) new_df.show(2, False) #+---+----------------------+ #|id |animals | #+---+----------------------+ #|1 |[dogs -> 2, cats -> 0]| #|2 |[dogs -> 0, cats -> 1]| #+---+----------------------+ new_df.printSchema() #root # |-- id: long (nullable = true) # |-- animals: map (nullable = false) # | |-- key: string # | |-- value: long (valueContainsNull = true) :请使用struct函数:

struct