== Parsed Logical Plan ==
GlobalLimit 11
+- LocalLimit 11
+- Project [cast(userId#0L as string) AS userId#12, cast(movieId#1L as string) AS movieId#13, cast(rating#2 as string) AS rating#14, cast(timestamp_str#3L as string) AS timestamp_str#15]
+- LogicalRDD [userId#0L, movieId#1L, rating#2, timestamp_str#3L], false
== Analyzed Logical Plan ==
userId: string, movieId: string, rating: string, timestamp_str: string
GlobalLimit 11
+- LocalLimit 11
+- Project [cast(userId#0L as string) AS userId#12, cast(movieId#1L as string) AS movieId#13, cast(rating#2 as string) AS rating#14, cast(timestamp_str#3L as string) AS timestamp_str#15]
+- LogicalRDD [userId#0L, movieId#1L, rating#2, timestamp_str#3L], false
== Optimized Logical Plan ==
GlobalLimit 11
+- LocalLimit 11
+- Project [cast(userId#0L as string) AS userId#12, cast(movieId#1L as string) AS movieId#13, cast(rating#2 as string) AS rating#14, cast(timestamp_str#3L as string) AS timestamp_str#15]
+- LogicalRDD [userId#0L, movieId#1L, rating#2, timestamp_str#3L], false
== Physical Plan ==
CollectLimit 11
+- *(1) Project [cast(userId#0L as string) AS userId#12, cast(movieId#1L as string) AS movieId#13, cast(rating#2 as string) AS rating#14, cast(timestamp_str#3L as string) AS timestamp_str#15]
+- *(1) Scan ExistingRDD[userId#0L,movieId#1L,rating#2,timestamp_str#3L]