I have a pretty complex nested structure with several levels. So in order to create it I use SQLContext.createDataFrame method and provide specific Rows with specific StrucTypes, both of which I build myself.
To build a Row I iterate over my values and literally build a Row. List<Object> row = new LinkedList<>(); for (Attribute attributeNode : attributeNodes()) { final String name = attributeNode.getName(); if (name.equals(“attr-simple-1")) { row.add(obj.getValue()); } else if (name.equals("attr-nested-1")) { List<Object> rowAttributes = new LinkedList<>(); for (Attribute node : attributeNode.getAttributes()) { String nodeName = node.getName(); if (obj.getSimpleAttributeNames().contains(nodeName)) { rowAttributes.add( value ); } else if ( nested ) { rowAttributes.add( // recursion ); } else rowAttributes.add(null); } row.add(new GenericRow(rowAttributes.toArray(new Object[rowAttributes.size()]))); } else { row.add(null); } } return new GenericRow(row.toArray(new Object[row.size()])); To build StructType I create an array of StructFields List<StructField> structFields = ... if (attribute.isSingleValue()) { structFields.add(DataTypes.createStructField(attribute.getName(), dataType(attribute), true)); } else { structFields.add(DataTypes.createStructField(attribute.getName(), DataTypes.createArrayType(dataType(attribute)), true)); } and then DataTypes.createStructType(structFields); dataType() is a method to get corresponding o.a.spark.sql.types.DataType; If you have to create Row with another structure you just can map original Row into the one with the new structure and build corresponding StructType. Although if you find a simpler way, I’d really like to know about that. On 07 Aug 2015, at 12:43, Rishabh Bhardwaj <rbnex...@gmail.com> wrote: > I am doing it by creating a new data frame out of the fields to be nested and > then join with the original DF. > Looking for some optimized solution here. > > On Fri, Aug 7, 2015 at 2:06 PM, Rishabh Bhardwaj <rbnex...@gmail.com> wrote: > Hi all, > > I want to have some nesting structure from the existing columns of the > dataframe. > For that,,I am trying to transform a DF in the following way,but couldn't do > it. > > scala> df.printSchema > root > |-- a: string (nullable = true) > |-- b: string (nullable = true) > |-- c: string (nullable = true) > |-- d: string (nullable = true) > |-- e: string (nullable = true) > |-- f: string (nullable = true) > > To > > scala> newDF.printSchema > root > |-- a: string (nullable = true) > |-- b: string (nullable = true) > |-- c: string (nullable = true) > |-- newCol: struct (nullable = true) > | |-- d: string (nullable = true) > | |-- e: string (nullable = true) > > > help me. > > Regards, > Rishabh. > Eugene Morozov fathers...@list.ru