You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@spark.apache.org by Sunitha Chennareddy <ch...@gmail.com> on 2018/03/29 03:05:53 UTC

Unable to get results of intermediate dataset

 Hi Team,

I am new to Spark, my requirement is I have a huge list, which is converted
to spark dataset and I need to operate on this dataset and store computed
values in another object/dataset and store in memory for further processing.

Approach I tried is : list is retrieved from third party in a loop. I
converted this list to dataset and using function I am trying to iterate
and store results in another dataset.
Problem I am facing : I am not able to see any data in newly computed
dataset.

Kindly help me to sort out this issue, please let me know if any better
approach.

Sample Code:
------------------------
Class Person implements Serializable{
private static final long serialVersionUID = 1L;

private String name;
Private PersonId id;
//getters and setters
}

Class personId
{
private int deptId;
//getters and setters
}

Class PersonDetails implements Serializable{

private static final long serialVersionUID = 1L;
private int deptId;
private BigDecimal sal;
private String name;

//getters and setters
}

In another Class - I have below template code

List<PersonDetails> personDtlsList = new ArrayList<>();
final Encoder<Person> encoder = Encoders.bean(Person.class);
final Encoder< PersonDetails > personDtlsEncoder = Encoders.bean(
PersonDetails .class);

// here I try to hit thrid party Interface and get person information in
list
List<Person> personList = getPersonInformation( passing few parameters);

Dataset<Person> personDS = sqlContext.createDataset(personList,encoder);
Dataset<PersonDetails> personDtlsDS = sqlContext.createDataset(
personDtlsList,personDtlsEncoder);


JavaRDD<PersonDetails> personDtlsRDD = personDS.toDF().toJavaRDD().map(new
Function<Row, PersonDetails>() {
private static final long serialVersionUID = 2L;

@Override
  public PersonDetails call(Row row)  throws Exception{
PersonDetails personDetails = new PersonDetails();
//setter for personDetails - name, sal and others
personDetails.setName(row.getString(0));
personDetails.setSal(new BigDecimal(10000));
 personDtlsDS.union(sqlContext.createDataset(new
ArrayList<PersonDetails>(){{add(personDetails);}}, personDtlsEncoder));
 return personDetails;
  }
});

personDtlsDS.count();


Regards,
Sunitha.