in spark/sql/dataframe.go [1516:1558]
func (df *dataFrameImpl) Unpivot(ctx context.Context,
ids []column.Convertible,
values []column.Convertible,
variableColumnName string,
valueColumnName string,
) (DataFrame, error) {
idExprs := make([]*proto.Expression, 0, len(ids))
for _, id := range ids {
expr, err := id.ToProto(ctx)
if err != nil {
return nil, err
}
idExprs = append(idExprs, expr)
}
valueExprs := make([]*proto.Expression, 0, len(values))
for _, value := range values {
expr, err := value.ToProto(ctx)
if err != nil {
return nil, err
}
valueExprs = append(valueExprs, expr)
}
rel := &proto.Relation{
Common: &proto.RelationCommon{
PlanId: newPlanId(),
},
RelType: &proto.Relation_Unpivot{
Unpivot: &proto.Unpivot{
Input: df.relation,
Ids: idExprs,
Values: &proto.Unpivot_Values{
Values: valueExprs,
},
VariableColumnName: variableColumnName,
ValueColumnName: valueColumnName,
},
},
}
return NewDataFrame(df.session, rel), nil
}