<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: aavash1</title>
    <description>The latest articles on DEV Community by aavash1 (@aavash1).</description>
    <link>https://dev.to/aavash1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F905271%2Fed3391d6-6167-477e-a9ae-2e8837b06735.jpeg</url>
      <title>DEV Community: aavash1</title>
      <link>https://dev.to/aavash1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aavash1"/>
    <language>en</language>
    <item>
      <title>Applying an action to a JavaPairRDD</title>
      <dc:creator>aavash1</dc:creator>
      <pubDate>Fri, 12 Aug 2022 12:49:00 +0000</pubDate>
      <link>https://dev.to/aavash1/applying-an-action-to-a-javapairrdd-3lon</link>
      <guid>https://dev.to/aavash1/applying-an-action-to-a-javapairrdd-3lon</guid>
      <description>&lt;p&gt;How to correctly apply the JavaPairRDD.foreachPartition function?&lt;br&gt;
I am new to apache spark and am trying to run a custom nearest neighbor algorithm on an RDD that has been partitioned into 2 parts using a custom partitioner. The JavaPairRDD contains the graph details and the random object created on the graph.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zK-Fe7iD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/61rbibq8a5o5d1y5uey3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zK-Fe7iD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/61rbibq8a5o5d1y5uey3.jpg" alt="graph loading and object generation" width="880" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TsBu_u3J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ebbkafxqzqanimx68xr9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TsBu_u3J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ebbkafxqzqanimx68xr9.jpg" alt="graph partition and subgraphs" width="880" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;According to my logic, I am building subgraphs for-each partition, and I am running a custom algorithm on each subgraph. It seems to be working "although not properly". I am not sure if this is the correct way to apply action in each partition. I am adding my code and the results as well. Comments and suggestions are highly appreciated.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0A_dzm_n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtge9cnhvaqdh86xkr2a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0A_dzm_n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtge9cnhvaqdh86xkr2a.jpg" alt="NN results" width="676" height="509"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

// &amp;lt;Partition_Index_Key, Map&amp;lt;Source_vertex, Map&amp;lt;Destination Vertex, Tuple2&amp;lt;Edge_Length, ArrayList of Random Objects&amp;gt;&amp;gt;
            JavaPairRDD&amp;lt;Object, Map&amp;lt;Object, Map&amp;lt;Object, Tuple2&amp;lt;Double, ArrayList&amp;lt;RoadObject&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; adjVertForSubgraphsRDD = jscontext
                    .parallelizePairs(adjacentVerticesForSubgraphs)
                    .partitionBy(new CustomPartitioner(CustomPartitionSize));

            //applying foreachPartition action on JavaPairRDD
            adjVertForSubgraphsRDD.foreachPartition(
                    new VoidFunction&amp;lt;Iterator&amp;lt;Tuple2&amp;lt;Object, Map&amp;lt;Object, Map&amp;lt;Object, Tuple2&amp;lt;Double, ArrayList&amp;lt;RoadObject&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;() {

                        /**
                         * 
                         */
                        private static final long serialVersionUID = 1L;

                        @Override
                        public void call(
                                Iterator&amp;lt;Tuple2&amp;lt;Object, Map&amp;lt;Object, Map&amp;lt;Object, Tuple2&amp;lt;Double, ArrayList&amp;lt;RoadObject&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tupleRow)
                                throws Exception {
                            int sourceVertex;
                            int destVertex;
                            double edgeLength;

                            int roadObjectId;
                            boolean roadObjectType;
                            double distanceFromStart;

                            CoreGraph subgraph0 = new CoreGraph();
                            CoreGraph subgraph1 = new CoreGraph();

                            while (tupleRow.hasNext()) {


                                Map&amp;lt;Object, Map&amp;lt;Object, Tuple2&amp;lt;Double, ArrayList&amp;lt;RoadObject&amp;gt;&amp;gt;&amp;gt;&amp;gt; newMap = tupleRow.next()
                                        ._2();

                                if ((Integer.parseInt(String.valueOf(tupleRow.next()._1())) == 0)) {

                                    for (Object srcVertex : newMap.keySet()) {

                                        for (Object dstVertex : newMap.get(srcVertex).keySet()) {
                                            if (newMap.get(srcVertex).get(dstVertex)._2() != null) {
                                                sourceVertex = Integer.parseInt(String.valueOf(srcVertex));
                                                destVertex = Integer.parseInt(String.valueOf(dstVertex));
                                                edgeLength = newMap.get(srcVertex).get(dstVertex)._1();

                                                subgraph0.addEdge(sourceVertex, destVertex, edgeLength);

                                                for (int i = 0; i &amp;lt; newMap.get(srcVertex).get(dstVertex)._2()
                                                        .size(); i++) {
                                                    int currentEdgeId = subgraph0.getEdgeId(sourceVertex, destVertex);

                                                    roadObjectId = newMap.get(srcVertex).get(dstVertex)._2().get(i)
                                                            .getObjectId();
                                                    roadObjectType = newMap.get(srcVertex).get(dstVertex)._2().get(i)
                                                            .getType();
                                                    distanceFromStart = newMap.get(srcVertex).get(dstVertex)._2().get(i)
                                                            .getDistanceFromStartNode();
                                                    RoadObject rn0 = new RoadObject();
                                                    rn0.setObjId(roadObjectId);
                                                    rn0.setType(roadObjectType);
                                                    rn0.setDistanceFromStartNode(distanceFromStart);

                                                    subgraph0.addObjectOnEdge(currentEdgeId, rn0);
                                                }
                                            } else {
                                                sourceVertex = Integer.parseInt(String.valueOf(srcVertex));
                                                destVertex = Integer.parseInt(String.valueOf(dstVertex));
                                                edgeLength = newMap.get(srcVertex).get(dstVertex)._1();

                                                subgraph0.addEdge(sourceVertex, destVertex, edgeLength);
                                            }

                                        }
                                    }

                                } else if ((Integer.parseInt(String.valueOf(tupleRow.next()._1())) == 1)) {

                                    for (Object srcVertex : newMap.keySet()) {
                                        for (Object dstVertex : newMap.get(srcVertex).keySet()) {
                                            if (newMap.get(srcVertex).get(dstVertex)._2() != null) {
                                                sourceVertex = Integer.parseInt(String.valueOf(srcVertex));
                                                destVertex = Integer.parseInt(String.valueOf(dstVertex));
                                                edgeLength = newMap.get(srcVertex).get(dstVertex)._1();

                                                subgraph1.addEdge(sourceVertex, destVertex, edgeLength);

                                                for (int i = 0; i &amp;lt; newMap.get(srcVertex).get(dstVertex)._2()
                                                        .size(); i++) {
                                                    int currentEdgeId = subgraph1.getEdgeId(sourceVertex, destVertex);

                                                    roadObjectId = newMap.get(srcVertex).get(dstVertex)._2().get(i)
                                                            .getObjectId();
                                                    roadObjectType = newMap.get(srcVertex).get(dstVertex)._2().get(i)
                                                            .getType();
                                                    distanceFromStart = newMap.get(srcVertex).get(dstVertex)._2().get(i)
                                                            .getDistanceFromStartNode();
                                                    RoadObject rn1 = new RoadObject();
                                                    rn1.setObjId(roadObjectId);
                                                    rn1.setType(roadObjectType);
                                                    rn1.setDistanceFromStartNode(distanceFromStart);

                                                    subgraph1.addObjectOnEdge(currentEdgeId, rn1);
                                                }
                                            } else {
                                                sourceVertex = Integer.parseInt(String.valueOf(srcVertex));
                                                destVertex = Integer.parseInt(String.valueOf(dstVertex));
                                                edgeLength = newMap.get(srcVertex).get(dstVertex)._1();

                                                subgraph1.addEdge(sourceVertex, destVertex, edgeLength);
                                            }

                                        }
                                    }
                                }

                            }
                            // Straight forward nearest neighbor algorithm from each true to false.
                            ANNNaive ann = new ANNNaive();
                            System.err.println("-------------------------------");
                            Map&amp;lt;Integer, Integer&amp;gt; nearestNeighorPairsSubg0 = ann.compute(subgraph0, true);
                            System.out.println("for subgraph0");
                            System.out.println(nearestNeighorPairsSubg0);
                            System.err.println("-------------------------------");

                            System.err.println("-------------------------------");
                            Map&amp;lt;Integer, Integer&amp;gt; nearestNeighorPairsSubg1 = ann.compute(subgraph1, true);
                            System.out.println("for subgraph1");
                            System.out.println(nearestNeighorPairsSubg1);
                            System.err.println("-------------------------------");

                        }
                    });`



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>java</category>
      <category>beginners</category>
      <category>programming</category>
      <category>help</category>
    </item>
    <item>
      <title>Apache spark to find nearest neighbor in road networks</title>
      <dc:creator>aavash1</dc:creator>
      <pubDate>Mon, 08 Aug 2022 12:53:47 +0000</pubDate>
      <link>https://dev.to/aavash1/apache-spark-to-find-nearest-neighbor-in-road-networks-1cam</link>
      <guid>https://dev.to/aavash1/apache-spark-to-find-nearest-neighbor-in-road-networks-1cam</guid>
      <description>&lt;p&gt;I am trying to write an distributed algorithm that helps to find a nearest answer object for every query objects in a road network. I am using Apache spark core Java API. Since, this is a very first time for me to write code in Apache spark, I find it very challenging. Additionally, I am not able to get any help from the developer community. Hence, I would like to get some suggestions from the experts. It would be a great help to help me build the programming logic, so that I could write the code by myself.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>help</category>
      <category>java</category>
      <category>spark</category>
    </item>
  </channel>
</rss>
