Skip to content

Commit

Permalink
[SPARK-13098] [SQL] remove GenericInternalRowWithSchema
Browse files Browse the repository at this point in the history
This class is only used for serialization of Python DataFrame. However, we don't require internal row there, so `GenericRowWithSchema` can also do the job.

Author: Wenchen Fan <wenchen@databricks.com>

Closes #10992 from cloud-fan/python.
  • Loading branch information
cloud-fan authored and davies committed Jan 30, 2016
1 parent e6a02c6 commit dab246f
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -233,18 +233,6 @@ class GenericInternalRow(private[sql] val values: Array[Any]) extends BaseGeneri
override def copy(): GenericInternalRow = this
}

/**
* This is used for serialization of Python DataFrame
*/
class GenericInternalRowWithSchema(values: Array[Any], val schema: StructType)
extends GenericInternalRow(values) {

/** No-arg constructor for serialization. */
protected def this() = this(null, null)

def fieldIndex(name: String): Int = schema.fieldIndex(name)
}

class GenericMutableRow(values: Array[Any]) extends MutableRow with BaseGenericInternalRow {
/** No-arg constructor for serialization. */
protected def this() = this(null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ object EvaluatePython {
values(i) = toJava(row.get(i, struct.fields(i).dataType), struct.fields(i).dataType)
i += 1
}
new GenericInternalRowWithSchema(values, struct)
new GenericRowWithSchema(values, struct)

case (a: ArrayData, array: ArrayType) =>
val values = new java.util.ArrayList[Any](a.numElements())
Expand Down Expand Up @@ -199,10 +199,7 @@ object EvaluatePython {

case (c: Long, TimestampType) => c

case (c: String, StringType) => UTF8String.fromString(c)
case (c, StringType) =>
// If we get here, c is not a string. Call toString on it.
UTF8String.fromString(c.toString)
case (c, StringType) => UTF8String.fromString(c.toString)

case (c: String, BinaryType) => c.getBytes("utf-8")
case (c, BinaryType) if c.getClass.isArray && c.getClass.getComponentType.getName == "byte" => c
Expand Down Expand Up @@ -263,11 +260,11 @@ object EvaluatePython {
}

/**
* Pickler for InternalRow
* Pickler for external row.
*/
private class RowPickler extends IObjectPickler {

private val cls = classOf[GenericInternalRowWithSchema]
private val cls = classOf[GenericRowWithSchema]

// register this to Pickler and Unpickler
def register(): Unit = {
Expand All @@ -282,7 +279,7 @@ object EvaluatePython {
} else {
// it will be memorized by Pickler to save some bytes
pickler.save(this)
val row = obj.asInstanceOf[GenericInternalRowWithSchema]
val row = obj.asInstanceOf[GenericRowWithSchema]
// schema should always be same object for memoization
pickler.save(row.schema)
out.write(Opcodes.TUPLE1)
Expand Down

0 comments on commit dab246f

Please sign in to comment.