2014-07-25 18 views
28

Wiemy, że w iskrze istnieje metoda rdd.collect, która konwertuje RDD do listy.Jak przekonwertować listę do JavaRDD

List<String> f= rdd.collect(); 
String[] array = f.toArray(new String[f.size()]); 

Próbuję zrobić dokładnie odwrotnie w moim projekcie. Mam ArrayList of String, który chcę przekonwertować na JavaRDD. Szukam tego rozwiązania od jakiegoś czasu, ale nie znalazłem odpowiedzi. Czy ktokolwiek może mi tutaj pomóc?

Odpowiedz

47

Szukasz JavaSparkContext.parallelize(List) i podobnych. Jest to podobne do interfejsu API Scala.

+0

Dzięki za pomoc Sean. Jego lista konwertująca do JavaRDD. –

+0

Czy masz pojęcie "JdbcRDD" w iskrze? Próbuję zaimplementować go w Javie, ale nie mam żadnego postu lub przykładu na ten temat. Mam jeden link (https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/JdbcRDD.scala) na ten temat. Ale nie jestem w stanie zrozumieć kodu scala. –

+0

@AmitabhRanjan potrzebują osobnego pytania do tego – samthebest

-1
List<StructField> fields = new ArrayList<>(); 
fields.add(DataTypes.createStructField("fieldx1", DataTypes.StringType, true)); 
fields.add(DataTypes.createStructField("fieldx2", DataTypes.StringType, true)); 
fields.add(DataTypes.createStructField("fieldx3", DataTypes.LongType, true)); 


List<Row> data = new ArrayList<>(); 
data.add(RowFactory.create("","","")); 
Dataset<Row> rawDataSet = spark.createDataFrame(data, schema).toDF(); 
1

Istnieją dwa sposoby konwertowania kolekcji na RDD.

1) sc.Parallelize(collection) 
2) sc.makeRDD(collection) 

Obie metody są identyczne, więc możemy użyć dowolnego z nich

+0

+1 - To było idealne rozwiązanie dla databricks. Chociaż nie sądzę, że to słowo ma sens poza tym kontekstem? – Paul

+0

otrzymujemy obiekt iskontekstu (sc) utworzony w iskrze-skorupie, w przeciwnym razie musimy stworzyć iskontekst (może być tylko jeden obiekt kontekstu dla każdego programu) –

+0

oh, ok, więc jest jeszcze bardziej ogólny niż myślałem. Mam gogle databricks na – Paul

2

Dodawanie Sean Owen i inne rozwiązania

Można użyć JavaSparkContext#parallelizePairs dla List z Tuple

List<Tuple2<Integer, Integer>> pairs = new ArrayList<>(); 
pairs.add(new Tuple2<>(0, 5)); 
pairs.add(new Tuple2<>(1, 3)); 

JavaSparkContext sc = new JavaSparkContext(); 

JavaPairRDD<Integer, Integer> rdd = sc.parallelizePairs(pairs); 
Powiązane problemy