Currently Spark has two implementations for Row:
import org.apache.spark.sql.Row
import org.apache.spark.sql.catalyst.InternalRow
What is the need to have both of them? Do they represent the same encoded entities but one used internally (internal APIs) and the other is used with the external APIs?
Row
an abstraction for user API, not implementation. Other than that you are correct. – Budwig