মানচিত্র এবং ফ্ল্যাটম্যাপ এবং প্রত্যেকের জন্য একটি ভাল ব্যবহারের ক্ষেত্রে পার্থক্য কী?


249

কেউ আমাকে মানচিত্র এবং ফ্ল্যাটম্যাপের মধ্যে পার্থক্য ব্যাখ্যা করতে পারেন এবং প্রত্যেকের জন্য ভাল ব্যবহারের ক্ষেত্রে কী?

"ফলাফল সমতল" এর অর্থ কী? এটা কি জন্য ভাল?


4
যেহেতু আপনি স্পার্ক ট্যাগ জুড়েছে, আমি আপনার সম্পর্কে বলছি অনুমান করব RDD.mapএবং RDD.flatMapএ্যাপাচি স্পার্ক । সাধারণভাবে, স্পার্কের আরডিডি ক্রিয়াকলাপগুলি তাদের সম্পর্কিত স্কাল সংগ্রহ ক্রিয়াকলাপের পরে মডেল করা হয়। স্ট্যাকওভারফ্লো . com / q / 1059776 / 590203 এর উত্তরগুলি , যা স্কালার মধ্যে mapএবং এর flatMapমধ্যে পার্থক্য নিয়ে আলোচনা করে , আপনার পক্ষে সহায়ক হতে পারে।
জোশ রোসন

1
এখানে বেশিরভাগ উদাহরণগুলি মনে হয় যে ফ্ল্যাটম্যাপ কেবল সংগ্রহের জন্যই পরিচালনা করে, যা এটি নয়।
বুড়ো

উত্তর:


195

এখানে পার্থক্যটির একটি উদাহরণ, একটি spark-shellঅধিবেশন হিসাবে :

প্রথমত, কিছু তথ্য - পাঠ্যের দুটি লাইন:

val rdd = sc.parallelize(Seq("Roses are red", "Violets are blue"))  // lines

rdd.collect

    res0: Array[String] = Array("Roses are red", "Violets are blue")

এখন, mapদৈর্ঘ্যের N এর একটি আরডিডিকে দৈর্ঘ্যের N এর আরডিডি রূপান্তর করে

উদাহরণস্বরূপ, এটি দুটি লাইন থেকে দুটি লাইন দৈর্ঘ্যে মানচিত্র করে:

rdd.map(_.length).collect

    res1: Array[Int] = Array(13, 16)

তবে flatMap(আলগাভাবে বলতে) দৈর্ঘ্যের N এর একটি আরডিডিকে N সংগ্রহের সংকলনে রূপান্তরিত করে, তারপরে এগুলি ফলাফলের একক আরডিডি রূপান্তর করে।

rdd.flatMap(_.split(" ")).collect

    res2: Array[String] = Array("Roses", "are", "red", "Violets", "are", "blue")

আমাদের প্রতি লাইন একাধিক শব্দ এবং একাধিক লাইন রয়েছে তবে আমরা শব্দের একক আউটপুট অ্যারে দিয়ে শেষ করি

কেবল এটি চিত্রিত করার জন্য, ফ্ল্যাটম্যাপিং লাইনের সংকলন থেকে শব্দের সংকলনের মতো দেখাচ্ছে:

["aa bb cc", "", "dd"] => [["aa","bb","cc"],[],["dd"]] => ["aa","bb","cc","dd"]

ইনপুট এবং আউটপুট আরডিডি সাধারণত তাই বিভিন্ন আকারের হবে flatMap

যদি আমরা mapআমাদের splitফাংশনটি ব্যবহার করার চেষ্টা করে থাকি তবে আমরা নেস্টেড স্ট্রাকচারগুলি (শব্দের অ্যারেগুলির একটি আরডিডি, টাইপ সহ RDD[Array[String]]) দিয়ে শেষ করতাম কারণ প্রতি ইনপুটটিতে আমাদের ঠিক এক ফলাফল থাকতে হবে:

rdd.map(_.split(" ")).collect

    res3: Array[Array[String]] = Array(
                                     Array(Roses, are, red), 
                                     Array(Violets, are, blue)
                                 )

শেষ অবধি, একটি দরকারী বিশেষ কেস একটি ফাংশন সহ ম্যাপিং যা সম্ভবত কোনও উত্তর না ফেরায় এবং তাই একটি প্রদান করে OptionflatMapযে উপাদানগুলি প্রত্যাবর্তন করে Noneতাদের কাছ থেকে মানগুলি বের করে এবং নিষ্কাশন করতে আমরা ফিল্টারগুলি ব্যবহার করতে পারি Some:

val rdd = sc.parallelize(Seq(1,2,3,4))

def myfn(x: Int): Option[Int] = if (x <= 2) Some(x * 10) else None

rdd.flatMap(myfn).collect

    res3: Array[Int] = Array(10,20)

(এখানে লক্ষণীয় যে একটি বিকল্প তালিকার মতো আচরণ করে যার মধ্যে একটি উপাদান বা শূন্য উপাদান রয়েছে)


1
কলিং কি মানচিত্রের মধ্যে বিভক্ত হবে ["a b c", "", "d"] => [["a","b","c"],[],["d"]]?
ব্যবহারকারী2635088

1
হ্যাঁ - (তবে মনে রাখবেন যে আমার অনানুষ্ঠানিক স্বরলিপিটি কেবল কোনও ধরণের সংকেত বোঝাতেই বোঝানো হয়েছিল - আসলে splitস্ট্রিংসের তালিকার উপরে ম্যাপিংটি অ্যারেগুলির তালিকা তৈরি করবে)
ডিএনএ

2
এটি লেখার জন্য ধন্যবাদ, আমি এটির মধ্যে পার্থক্যটি আলাদা করতে সবচেয়ে ভাল ব্যাখ্যাটি পড়েছি
রাজীব

97

সাধারণত আমরা হ্যাডুপে শব্দ গণনা উদাহরণ ব্যবহার করি। আমি একই ব্যবহারের ক্ষেত্রে নেব এবং ব্যবহার করব mapএবং flatMapএটি কীভাবে ডেটা প্রক্রিয়াকরণ করছে তা আমরা দেখতে পাব।

নীচে নমুনা ডেটা ফাইল রয়েছে।

hadoop is fast
hive is sql on hdfs
spark is superfast
spark is awesome

উপরের ফাইলটি mapএবং ব্যবহার করে পার্স করা হবে flatMap

ব্যবহার map

>>> wc = data.map(lambda line:line.split(" "));
>>> wc.collect()
[u'hadoop is fast', u'hive is sql on hdfs', u'spark is superfast', u'spark is awesome']

ইনপুটটিতে 4 টি লাইন রয়েছে এবং আউটপুট আকার 4 টিও হয়, যেমন এন উপাদানগুলি ==> এন উপাদানগুলি।

ব্যবহার flatMap

>>> fm = data.flatMap(lambda line:line.split(" "));
>>> fm.collect()
[u'hadoop', u'is', u'fast', u'hive', u'is', u'sql', u'on', u'hdfs', u'spark', u'is', u'superfast', u'spark', u'is', u'awesome']

আউটপুট মানচিত্র থেকে পৃথক।


শব্দের সংখ্যাটি পেতে প্রতিটি কীটির মান হিসাবে 1 নির্ধারণ করি।

  • fm: আরডিডি ব্যবহার করে তৈরি করা হয়েছে flatMap
  • wc: আরডিডি ব্যবহার করে তৈরি করা হয়েছে map
>>> fm.map(lambda word : (word,1)).collect()
[(u'hadoop', 1), (u'is', 1), (u'fast', 1), (u'hive', 1), (u'is', 1), (u'sql', 1), (u'on', 1), (u'hdfs', 1), (u'spark', 1), (u'is', 1), (u'superfast', 1), (u'spark', 1), (u'is', 1), (u'awesome', 1)]

আরডিডি- flatMapতে wcনীচে অনাকাঙ্ক্ষিত আউটপুট দেবে:

>>> wc.flatMap(lambda word : (word,1)).collect()
[[u'hadoop', u'is', u'fast'], 1, [u'hive', u'is', u'sql', u'on', u'hdfs'], 1, [u'spark', u'is', u'superfast'], 1, [u'spark', u'is', u'awesome'], 1]

mapপরিবর্তে ব্যবহৃত হলে আপনি গণনা শব্দটি পেতে পারেন না flatMap

সংজ্ঞা অনুসারে mapএবং এর মধ্যে পার্থক্য flatMap:

map: এটি আরডিডির প্রতিটি উপাদানগুলিতে প্রদত্ত ফাংশন প্রয়োগ করে একটি নতুন আরডিডি প্রদান করে। mapশুধুমাত্র একটি আইটেম ফাংশন ফাংশন ।

flatMap: এর অনুরূপ map, এটি আরডিডির প্রতিটি উপাদানগুলিতে একটি ফাংশন প্রয়োগ করে একটি নতুন আরডিডি দেয়, তবে আউটপুট সমতল হয়।


14
আমি মনে করি এই উত্তর গৃহীত উত্তরের চেয়ে ভাল।
কৃষ্ণ

15
কেন আপনি পৃথিবীতে অযৌক্তিক স্ক্রিনশট তৈরি করবেন, যখন আপনি কেবল আউটপুট পাঠ্যটি অনুলিপি করতে পারবেন?
nbubis

সুতরাং ফ্ল্যাটম্যাপ () হ'ল মানচিত্র () + "ফ্ল্যাটেন" এবং আমি জানি এটি বেশি অর্থবোধ করে না তবে কি কোনও ধরণের "ফ্ল্যাটেন" ফাংশন রয়েছে যা আমরা মানচিত্রের পরে ব্যবহার করতে পারি ()?
বুড়াকংগুন

2
আপনার কোডটিতে একটি বিভ্রান্তিকর টাইপ রয়েছে। এর ফলাফল .map(lambda line:line.split(" "))স্ট্রিংগুলির একটি অ্যারে নয়। আপনার পরিবর্তন data.collect() করা উচিত wc.collectএবং আপনি অ্যারেগুলির একটি অ্যারে দেখতে পাবেন।
সোদেব

1
হ্যাঁ, তবে আদেশের ফলাফলটি এখনও ভুল wrong তুমি কি ছুটছ wc.collect()?
সোদেব

18

আপনি যদি স্পার্কে আরডিডি.ম্যাপ এবং আরডিডি.ফ্ল্যাটম্যাপের মধ্যে পার্থক্য জিজ্ঞাসা করছেন, মানচিত্র একটি আকারের আরডিডি আকারের অন্য একটিতে রূপান্তর করে। যেমন।

myRDD.map(x => x*2)

উদাহরণস্বরূপ, যদি মাইআরডিডি ডাবলসের সমন্বয়ে গঠিত।

যদিও ফ্ল্যাটম্যাপ আরডিডিটিকে একটি ভিন্ন আকারের একের মধ্যে রূপান্তর করতে পারে: যেমন:

myRDD.flatMap(x =>new Seq(2*x,3*x))

যা আকার 2 * এন বা একটি আরডিডি প্রদান করবে

myRDD.flatMap(x =>if x<10 new Seq(2*x,3*x) else new Seq(x) )

17

এটি আপনার প্রাথমিক প্রশ্নে ফুটে উঠেছে : চাটুকার বলতে কী বোঝ ?

আপনি যখন ফ্ল্যাটম্যাপ ব্যবহার করেন, একটি "বহুমাত্রিক" সংগ্রহটি "এক-মাত্রিক" সংগ্রহ হয়ে যায় ।

val array1d = Array ("1,2,3", "4,5,6", "7,8,9")  
//array1d is an array of strings

val array2d = array1d.map(x => x.split(","))
//array2d will be : Array( Array(1,2,3), Array(4,5,6), Array(7,8,9) )

val flatArray = array1d.flatMap(x => x.split(","))
//flatArray will be : Array (1,2,3,4,5,6,7,8,9)

আপনি যখন ফ্ল্যাটম্যাপ ব্যবহার করতে চান,

  • আপনার মানচিত্রের ফাংশনটির ফলে বহু স্তরের কাঠামো তৈরি হয়
  • সমস্ত কিছু অভ্যন্তরীণ গোষ্ঠীকরণগুলি সরিয়ে আপনি যা চান তা হ'ল একটি সমতল - এক মাত্রিক কাঠামো

15

test.mdউদাহরণ হিসাবে ব্যবহার করুন :

➜  spark-1.6.1 cat test.md
This is the first line;
This is the second line;
This is the last line.

scala> val textFile = sc.textFile("test.md")
scala> textFile.map(line => line.split(" ")).count()
res2: Long = 3

scala> textFile.flatMap(line => line.split(" ")).count()
res3: Long = 15

scala> textFile.map(line => line.split(" ")).collect()
res0: Array[Array[String]] = Array(Array(This, is, the, first, line;), Array(This, is, the, second, line;), Array(This, is, the, last, line.))

scala> textFile.flatMap(line => line.split(" ")).collect()
res1: Array[String] = Array(This, is, the, first, line;, This, is, the, second, line;, This, is, the, last, line.)

আপনি ব্যবহার করেন তাহলে mapপদ্ধতি, আপনি লাইনের পাবেন test.md, জন্য flatMapপদ্ধতি, আপনি শব্দের সংখ্যা পাবেন।

mapপদ্ধতি অনুরূপ flatMap, সব তারা প্রত্যাবর্তন একটি নতুন RDD হয়। mapপদ্ধতিটি প্রায়শই একটি নতুন আরডিডি রিটার্ন ব্যবহার করার জন্য, flatMapপদ্ধতিটি প্রায়শই বিভক্ত শব্দ ব্যবহার করে।


9

mapসমান সংখ্যক উপাদানের আরডিডি প্রদান করে যখন flatMapনাও পারে।

flatMapফিল্টার আউট বা ভুল ডেটা ফিল্টার করার জন্য উদাহরণ ব্যবহার করুন।

mapইনপুট এবং আউটপুট উপাদানগুলির সংখ্যা একই যেখানে বিস্তৃত ক্ষেত্রে ব্যবহারের জন্য উদাহরণ ব্যবহারের ক্ষেত্রে

number.csv

1
2
3
-
4
-
5

map.py অ্যাড.এসএসভিতে সমস্ত সংখ্যা যুক্ত করে।

from operator import *

def f(row):
  try:
    return float(row)
  except Exception:
    return 0

rdd = sc.textFile('a.csv').map(f)

print(rdd.count())      # 7
print(rdd.reduce(add))  # 15.0

ফ্ল্যাটম্যাপ.পি যোগflatMap করার আগে নিখোঁজ ডেটা ফিল্টার আউট ব্যবহার করে। আগের সংস্করণের তুলনায় কম সংখ্যক যোগ করা হয়েছে।

from operator import *

def f(row):
  try:
    return [float(row)]
  except Exception:
    return []

rdd = sc.textFile('a.csv').flatMap(f)

print(rdd.count())      # 5
print(rdd.reduce(add))  # 15.0

8

মানচিত্র এবং ফ্ল্যাটম্যাপ অনুরূপ, অর্থে তারা ইনপুট আরডিডি থেকে একটি লাইন নিয়ে তাতে কোনও ফাংশন প্রয়োগ করে। তারা যেভাবে পৃথক হয় তা হ'ল মানচিত্রে ফাংশনটি কেবল একটি উপাদানকে ফেরত দেয়, যখন ফ্ল্যাটম্যাপে ফাংশন পুনরাবৃত্তকারী হিসাবে উপাদানগুলির (0 বা আরও বেশি) তালিকা ফিরিয়ে দিতে পারে।

এছাড়াও, ফ্ল্যাটম্যাপের আউটপুট সমতল হয়। যদিও ফ্ল্যাটম্যাপে ফাংশন উপাদানগুলির একটি তালিকা ফেরত দেয়, ফ্ল্যাটম্যাপটি একটি আরডিডি ফিরিয়ে দেয় যা তালিকা থেকে সমস্ত উপাদানকে সমতল উপায়ে (তালিকা নয়) দেয়।


7

সমস্ত উদাহরণ ভাল .... এখানে দুর্দান্ত দর্শন চিত্র ... উত্স সৌজন্যে: স্পার্কের ডেটাফ্লেয়ার প্রশিক্ষণ

মানচিত্র: একটি মানচিত্র অ্যাপাচি স্পার্কে একটি রূপান্তর অপারেশন। এটি আরডিডির প্রতিটি উপাদানগুলিতে প্রযোজ্য এবং ফলাফলটি নতুন আরডিডি হিসাবে দেয়। মানচিত্রে, অপারেশন বিকাশকারী তার নিজস্ব কাস্টম ব্যবসার যুক্তি সংজ্ঞায়িত করতে পারেন। আরডিডির সমস্ত উপাদানগুলিতে একই যুক্তি প্রয়োগ করা হবে।

স্পার্ক আরডিডি mapফাংশনটি কাস্টম কোড (বিকাশকারী দ্বারা নির্দিষ্ট করা) অনুযায়ী ইনপুট প্রক্রিয়া হিসাবে একটি উপাদান নেয় এবং একসাথে একটি উপাদান ফেরত দেয়। মানচিত্র দৈর্ঘ্যের N এর একটি আরডিডি দৈর্ঘ্যের N এর অন্য আরডিডি রূপান্তর করে The ইনপুট এবং আউটপুট আরডিডিগুলিতে সাধারণত সমান সংখ্যক রেকর্ড থাকে।

এখানে চিত্র বর্ণনা লিখুন

mapস্কেল ব্যবহারের উদাহরণ :

val x = spark.sparkContext.parallelize(List("spark", "map", "example",  "sample", "example"), 3)
val y = x.map(x => (x, 1))
y.collect
// res0: Array[(String, Int)] = 
//    Array((spark,1), (map,1), (example,1), (sample,1), (example,1))

// rdd y can be re writen with shorter syntax in scala as 
val y = x.map((_, 1))
y.collect
// res1: Array[(String, Int)] = 
//    Array((spark,1), (map,1), (example,1), (sample,1), (example,1))

// Another example of making tuple with string and it's length
val y = x.map(x => (x, x.length))
y.collect
// res3: Array[(String, Int)] = 
//    Array((spark,5), (map,3), (example,7), (sample,6), (example,7))

সমতল মানচিত্র :

flatMapএকটি রূপান্তর অপারেশন। এটি আরডিডির প্রতিটি উপাদানগুলিতে প্রযোজ্য এবং ফলাফলটি নতুন হিসাবে ফিরিয়ে দেয় RDD। এটি মানচিত্রের অনুরূপ, তবে ফ্ল্যাটম্যাপ মানচিত্রের কার্যকারিতা থেকে 0, 1 বা আরও বেশি উপাদান ফেরত দেয়। ফ্ল্যাটম্যাপ অপারেশনে, একজন বিকাশকারী তার নিজস্ব কাস্টম ব্যবসার যুক্তি সংজ্ঞায়িত করতে পারে। আরডিডির সমস্ত উপাদানগুলিতে একই যুক্তি প্রয়োগ করা হবে।

"ফলাফল সমতল" এর অর্থ কী?

একটি ফ্ল্যাটম্যাপ ফাংশন কাস্টম কোড অনুসারে এটি একটি উপাদান ইনপুট প্রক্রিয়া হিসাবে গ্রহণ করে (বিকাশকারী দ্বারা নির্দিষ্ট করা হয়) এবং একবারে 0 বা ততোধিক উপাদান ফেরত দেয়। flatMap() দৈর্ঘ্য N এর একটি আরডিডি দৈর্ঘ্যের এম এর আরডিডি রূপান্তর করে

এখানে চিত্র বর্ণনা লিখুন

flatMapস্কেল ব্যবহারের উদাহরণ :

val x = spark.sparkContext.parallelize(List("spark flatmap example",  "sample example"), 2)

// map operation will return Array of Arrays in following case : check type of res0
val y = x.map(x => x.split(" ")) // split(" ") returns an array of words
y.collect
// res0: Array[Array[String]] = 
//  Array(Array(spark, flatmap, example), Array(sample, example))

// flatMap operation will return Array of words in following case : Check type of res1
val y = x.flatMap(x => x.split(" "))
y.collect
//res1: Array[String] = 
//  Array(spark, flatmap, example, sample, example)

// RDD y can be re written with shorter syntax in scala as 
val y = x.flatMap(_.split(" "))
y.collect
//res2: Array[String] = 
//  Array(spark, flatmap, example, sample, example)

5

পার্থক্যটি নীচে নমুনা পাইপার্ক কোড থেকে দেখা যায়:

rdd = sc.parallelize([2, 3, 4])
rdd.flatMap(lambda x: range(1, x)).collect()
Output:
[1, 1, 2, 1, 2, 3]


rdd.map(lambda x: range(1, x)).collect()
Output:
[[1], [1, 2], [1, 2, 3]]

3

ফ্ল্যাটম্যাপ এবং মানচিত্র উভয়ই সংগ্রহকে রূপান্তরিত করে।

পার্থক্য:

মানচিত্র (ফানক)
ফাংশন ফানকের মাধ্যমে উত্সের প্রতিটি উপাদানকে পাস করে গঠিত নতুন বিতরণ করা ডেটাসেটটি ফিরিয়ে দিন।

ফ্ল্যাটম্যাপ (ফানক)
মানচিত্রের মতো, তবে প্রতিটি ইনপুট আইটেম 0 বা ততোধিক আউটপুট আইটেমগুলিতে ম্যাপ করা যায় (সুতরাং ফানকটি একটি আইটেমের পরিবর্তে একটি সিক ফিরিয়ে আনতে পারে)।

রূপান্তর ফাংশন:
মানচিত্র : একটি উপাদান -> একটি উপাদান আউট।
ফ্ল্যাটম্যাপ : একটি উপাদান -> 0 বা আরও বেশি উপাদান (সংগ্রহ) out


3

RDD.map একক অ্যারেতে সমস্ত উপাদান প্রদান করে

RDD.flatMap অ্যারের অ্যারেতে উপাদানগুলি প্রদান করে

আসুন ধরে নেওয়া যাক আমাদের পাঠ্য টেক্সট ফাইলটিতে পাঠ্য আছে

Spark is an expressive framework
This text is to understand map and faltMap functions of Spark RDD

মানচিত্র ব্যবহার করা

val text=sc.textFile("text.txt").map(_.split(" ")).collect

আউটপুট:

text: **Array[Array[String]]** = Array(Array(Spark, is, an, expressive, framework), Array(This, text, is, to, understand, map, and, faltMap, functions, of, Spark, RDD))

ফ্ল্যাটম্যাপ ব্যবহার করা হচ্ছে

val text=sc.textFile("text.txt").flatMap(_.split(" ")).collect

আউটপুট:

 text: **Array[String]** = Array(Spark, is, an, expressive, framework, This, text, is, to, understand, map, and, faltMap, functions, of, Spark, RDD)

2

যারা পাইসপার্ক সম্পর্কিত চান তাদের সকলের জন্য:

উদাহরণ রূপান্তর: ফ্ল্যাটম্যাপ

>>> a="hello what are you doing"
>>> a.split()

['ওহে তুমি কি কর']

>>> b=["hello what are you doing","this is rak"]
>>> b.split()

ট্রেসব্যাক (সর্বশেষতম কল শেষ): ফাইল "", লাইন 1, এট্রিবিউটেরায়ার: "তালিকা" অবজেক্টটির কোনও বৈশিষ্ট্য নেই 'স্প্লিট'

>>> rline=sc.parallelize(b)
>>> type(rline)

>>> def fwords(x):
...     return x.split()


>>> rword=rline.map(fwords)
>>> rword.collect()

[['হ্যালো', 'কি', 'তারা', 'আপনি', 'করছেন'], ['এটি', 'হ'ল', 'রাক']]

>>> rwordflat=rline.flatMap(fwords)
>>> rwordflat.collect()

['হ্যালো', 'কি', 'আপনি', 'আপনি', 'করছেন', 'এই', 'এটি', 'রাক']

আশা করি এটা সাহায্য করবে :)


2

map: এটি এর RDDপ্রতিটি উপাদানটিতে একটি ফাংশন প্রয়োগ করে একটি নতুন ফেরত দেয় RDD। .Map এ ফাংশনটি কেবলমাত্র একটি আইটেম ফিরে আসতে পারে।

flatMap: মানচিত্রের অনুরূপ, এটি আরডিডির প্রতিটি উপাদানগুলিতে একটি ফাংশন প্রয়োগRDD করে একটি নতুন ফেরত দেয় তবে আউটপুট সমতল হয়।

এছাড়াও, ফাংশনগুলি flatMapউপাদানগুলির একটি তালিকা (0 বা আরও বেশি) ফিরিয়ে দিতে পারে

উদাহরণ স্বরূপ:

sc.parallelize([3,4,5]).map(lambda x: range(1,x)).collect()

আউটপুট: [[1, 2], [1, 2, 3], [1, 2, 3, 4]]

sc.parallelize([3,4,5]).flatMap(lambda x: range(1,x)).collect()

আউটপুট: নোটিশ ও / পি একক তালিকায় সমতল হয় [1, 2, 1, 2, 3, 1, 2, 3, 4]

সূত্র: https://www.linkedin.com/pulse/differences-between-map-flatmap-transformations-spark-pyspark-pandey/


0

মানচিত্র:

হ'ল একটি উচ্চতর অর্ডার পদ্ধতি যা ইনপুট হিসাবে একটি ফাংশন নেয় এবং উত্স আরডিডি-র প্রতিটি উপাদানকে এটি প্রয়োগ করে।

http://commandstech.com/difference-between-map-and-flatmap-in-spark-what-is-map-and-flatmap-with-examples/

সমতল মানচিত্র:

একটি উচ্চতর অর্ডার পদ্ধতি এবং রূপান্তর অপারেশন যা একটি ইনপুট ফাংশন নেয় takes


-1

মানচিত্র এবং ফ্ল্যাটম্যাপের আউটপুটটিতে পার্থক্য:

1।flatMap

val a = sc.parallelize(1 to 10, 5)

a.flatMap(1 to _).collect()

আউটপুট:

 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

map:

val a = sc.parallelize(List("dog", "salmon", "salmon", "rat", "elephant"), 3)

val b = a.map(_.length).collect()

আউটপুট:

3 6 6 3 8

-1
  • মানচিত্র (ফানক) একটি ফাংশন ফানক ঘোষিত মাধ্যমে উত্সের প্রতিটি উপাদানকে পাস করে গঠিত নতুন বিতরণ করা ডেটাসেটটি ফিরিয়ে দিন

সেই জমি বিক্রি করার

  • ফ্ল্যাটম্যাপ (ফানক) মানচিত্রের মতো, তবে প্রতিটি ইনপুট আইটেম 0 বা ততোধিক আউটপুট আইটেমগুলিতে ম্যাপ করা যায় যাতে ফানক একটি আইটেমের পরিবর্তে সিকোয়েন্সটি ফিরিয়ে দেয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.