in spark/sql/dataframe.go [776:805]
func (df *dataFrameImpl) WithMetadata(ctx context.Context, metadata map[string]string) (DataFrame, error) {
// WithMetadata works the same way as with columns but extracts the column reference from the DataFrame
// and injects it back into the projection.
aliases := make([]*proto.Expression_Alias, 0, len(metadata))
for colName, metadata := range metadata {
expr := column.OfDF(df, colName)
exprProto, err := expr.ToProto(ctx)
if err != nil {
return nil, err
}
alias := &proto.Expression_Alias{
Expr: exprProto,
Name: []string{colName},
Metadata: &metadata,
}
aliases = append(aliases, alias)
}
rel := &proto.Relation{
Common: &proto.RelationCommon{
PlanId: newPlanId(),
},
RelType: &proto.Relation_WithColumns{
WithColumns: &proto.WithColumns{
Input: df.relation,
Aliases: aliases,
},
},
}
return NewDataFrame(df.session, rel), nil
}