Datatyper

Datatyper som stöds

Apache Spark SQL och DataFrames har stöd för följande data typer:

  • Numeriska typer
    • ByteType: representerar 1-byte-signerade heltals nummer. Intervallet av tal är från -128 till 127 .
    • ShortType: representerar två byte-signerade heltals nummer. Intervallet av tal är från -32768 till 32767 .
    • IntegerType: representerar 4 bytes signerade heltals nummer. Intervallet av tal är från -2147483648 till 2147483647 .
    • LongType: representerar 8 bytes signerade heltals nummer. Intervallet av tal är från -9223372036854775808 till 9223372036854775807 .
    • FloatType: representerar 4 byte enprecisions flytt ALS nummer.
    • DoubleType: representerar 8 bytes dubbel precision för flytt ALS nummer.
    • DecimalType: representerar decimal tal med godtycklig precision. Stöds internt av java.math.BigDecimal . En BigDecimal består av ett godtyckligt decimalt heltal utan skalnings värde och en 32-bitars heltals skala.
  • Sträng typ:
    • StringType: representerar tecken sträng värden.
  • Binär typ:
    • BinaryType: representerar byte ordnings värden.
  • Boolesk typ:
    • BooleanType: representerar booleska värden.
  • DateTime-typer
    • TimestampType: representerar värden som omfattar värden för fälten år, månad, dag, timme, minut och sekund, med den lokala tids zonen för sessionen. Värdet för tidsstämpel representerar en absolut tidpunkt.
    • DateType: representerar värden som omfattar värden för fälten år, månad och dag, utan tids zon.
  • Komplexa typer
    • ArrayType (elementType, containsNull): representerar värden som består av en sekvens med element med typen elementType. containsNull Anger om element i ett ArrayType-värde kan ha null värden.
    • MapType (KeyType, valueType, valueContainsNull): representerar värden som består av en uppsättning nyckel/värde-par. Data typen för nycklar beskrivs av KeyType och data typen för värdena beskrivs av valueType. För ett MapType-värde får nycklar inte ha null värden. valueContainsNull Anger om värden för ett MapType-värde kan ha null värden.
    • StructType (fält): representerar värden med den struktur som beskrivs av en sekvens av StructFields (fält).
      • StructField (namn, datatyp, Nullable): representerar ett fält i en StructType. Namnet på ett fält anges av name . Data typen för ett fält anges med datatype. nullable Anger om värden för dessa fält kan ha null värden.

Språk mappningar

Scala

Spark SQL-datatyper definieras i paketet org.apache.spark.sql.types . Du kommer åt dem genom att importera paketet:

import org.apache.spark.sql.types._
Datatyp Värdetyp API för att komma åt eller skapa datatyp
ByteType Byte ByteType
ShortType Blank ShortType
IntegerType Int IntegerType
LongType Lång LongType
FloatType Float FloatType
DoubleType Double DoubleType
DecimalType java.math.BigDecimal DecimalType
StringType Sträng StringType
BinaryType Matris [byte] BinaryType
BooleanType Boolesk BooleanType
TimestampType java.sql.Timestamp TimestampType
DateType java.sql.Date DateType
ArrayType Scala. Collection. SEQ ArrayType (elementType, [containsNull]) Obs! standardvärdet för containsNull är true.
MapType Scala. Collection. map MapType (KeyType, valueType, [valueContainsNull]) Obs! standardvärdet för valueContainsNull är true.
StructType org. apache. Spark. SQL. Row StructType (fält) Obs! fält är en SEQ av StructFields. Dessutom tillåts inte två fält med samma namn.
StructField Värdetyp för data typen för det här fältet (till exempel int för en StructField med data typen IntegerType) StructField (namn, datatyp, [Nullable]) Obs! standardvärdet null är sant.

Java

Spark SQL-datatyper definieras i paketet org.apache.spark.sql.types . Använd fabriks metoder som finns i för att få åtkomst till eller skapa en datatyp org.apache.spark.sql.types.DataTypes .

Datatyp Värdetyp API för att komma åt eller skapa datatyp
ByteType byte eller byte DataTypes. ByteType
ShortType kort eller kort DataTypes. ShortType
IntegerType int eller Integer DataTypes. IntegerType
LongType lång eller lång DataTypes. LongType
FloatType float eller Float DataTypes. FloatType
DoubleType dubbel eller dubbel DataTypes. DoubleType
DecimalType java.math.BigDecimal DataTypes. createDecimalType ()-DataTypes. createDecimalType (precision, Scale).
StringType Sträng DataTypes. StringType
BinaryType byte[] DataTypes. BinaryType
BooleanType boolesk eller boolesk DataTypes. BooleanType
TimestampType java.sql.Timestamp DataTypes. TimestampType
DateType java.sql.Date DataTypes. DateType
ArrayType Java. util. list DataTypes. createArrayType-kommentar (elementType) : värdet för containsNull är true. DataTypes. createArrayType (elementType, containsNull).
MapType Java. util. map DataTypes. createMapType (KeyType, valueType) Obs! värdet för valueContainsNull är true. DataTypes. createMapType (KeyType, valueType, valueContainsNull)
StructType org. apache. Spark. SQL. Row DataTypes. createStructType (Fields) Obs: fält är en lista eller en matris med StructFields. Dessutom tillåts inte två fält med samma namn.
StructField Värdetyp för data typen för det här fältet (till exempel int för en StructField med data typen IntegerType) DataTypes. createStructField (namn, datatyp, nullbar)

Python

Spark SQL-datatyper definieras i paketet pyspark.sql.types . Du kommer åt dem genom att importera paketet:

from pyspark.sql.types import *
Datatyp Värdetyp API för att komma åt eller skapa datatyp
ByteType int eller Long Anmärkning: tal konverteras till heltal med 1 byte vid körning. Se till att talen ligger inom intervallet-128 till 127. ByteType()
ShortType int eller Long Obs! tal konverteras till tal med två byte-signerade heltal vid körning. Se till att talen ligger inom intervallet-32768 till 32767. ShortType()
IntegerType int eller Long IntegerType()
LongType lång Anmärkning: tal konverteras till tal med 8 bytes heltal vid körning. Se till att talen ligger inom intervallet 9 till 9223372036854775807. annars konverterar du data till Decimal form. Decimal och Använd DecimalType. LongType()
FloatType float Note: siffror konverteras till 4 bytes flyttal med enkel precision vid körning. FloatType()
DoubleType flyt DoubleType()
DecimalType decimal. Decimal DecimalType()
StringType sträng StringType()
BinaryType ByteArray BinaryType()
BooleanType boolesk BooleanType()
TimestampType DateTime. DateTime TimestampType()
DateType DateTime. date DateType()
ArrayType lista, tupel eller matris ArrayType (elementType, [containsNull]) Obs! standardvärdet för ContainsNull är true.
MapType dict MapType (KeyType, valueType, [valueContainsNull]) Obs! standardvärdet för ValueContainsNull är true.
StructType lista eller tupel StructType (fält) Obs! fält är en SEQ av StructFields. Dessutom tillåts inte två fält med samma namn.
StructField Värdetyp för data typen för det här fältet (till exempel int för en StructField med data typen IntegerType) StructField (namn, datatyp, [Nullable]) Obs! standardvärdet null är sant.

R

Datatyp Värdetyp API för att komma åt eller skapa datatyp
ByteType heltals notering: tal konverteras till heltal med 1 byte vid körning. Se till att talen ligger inom intervallet-128 till 127. stor
ShortType heltals notering: tal konverteras till heltal med två byte vid körning. Se till att talen ligger inom intervallet-32768 till 32767. blank
IntegerType heltal talet
LongType heltals notering: talen konverteras till tal med 8 bytes heltal vid körning. Se till att talen ligger inom intervallet-9 till 9223372036854775807. Annars konverterar du data till Decimal form. Decimal och Använd DecimalType. som
FloatType numeriskt Anmärkning: siffror konverteras till ett flyttal med 4 byte med enkel precision vid körning. flyta
DoubleType numeric Dubbelklicka
DecimalType Stöds inte Stöds inte
StringType jokerteck nollängd
BinaryType outspädd binär
BooleanType logiskt booleska
TimestampType POSIXct tidsstämpel
DateType Date ikraftträdande
ArrayType vektor eller lista List (Type = "matris", elementType = elementType, containsNull = [containsNull]) Obs! standardvärdet för CONTAINSNULL är true.
MapType miljö List (typ = "Mappa", KeyType = KeyType, valueType = valueType, valueContainsNull = [valueContainsNull]) Obs! standardvärdet för VALUECONTAINSNULL är true.
StructType namngiven lista List (Type = "struct", Fields = Fields) Obs! fälten är en SEQ av StructFields. Dessutom tillåts inte två fält med samma namn.
StructField Värde typen för det här fältets datatyp (till exempel heltal för en StructField med data typen IntegerType) List (namn = namn, typ = datatyp, Nullable = [Nullable]) Obs! standardvärdet null är sant.

SQL

I följande tabell visas både typ namn och alias som används i Spark SQL-parser för varje datatyp.

Datatyp SQL-namn
BooleanType BOOLESKT
ByteType BYTE, TINYINT
ShortType KORT, SMALLINT
IntegerType INT, INTEGER
LongType LÅNG, BIGINT
FloatType FLYTANDE, VERKLIG
DoubleType DOUBLE
DateType DATE
TimestampType TIMESTAMP
StringType NOLLÄNGD
BinaryType BINARY
DecimalType DECIMAL, DEC, NUMERISKT
CalendarIntervalType INTERVALL
ArrayType MATRIS<element_type>
StructType STRUCT<field1_name: field1_type, field2_name: field2_type,... >
MapType Kart<key_type value_type>

Särskilda flytt ALS värden

Spark SQL stöder flera särskilda flytt ALS värden på ett skift läges okänsligt sätt:

  • Inf, + inf, oändlighet, + oändlighet: positiv oändlighet
    • FloatType: motsvarande Scala Float.PositiveInfinity .
    • DoubleType: motsvarande Scala Double.PositiveInfinity .
  • -Inf, oändlighet: negativ oändlighet
    • FloatType: motsvarande Scala Float.NegativeInfinity .
    • DoubleType: motsvarande Scala Double.NegativeInfinity .
  • NaN: inte ett tal
    • FloatType: motsvarande Scala Float.NaN .
    • DoubleType: motsvarande Scala Double.NaN .

Positiva och negativa Infinity-semantik

Det finns särskild hantering för positiv och negativ oändlighet. De har följande semantik:

  • Positiv oändlighet multiplicerad med ett positivt värde returnerar positiv oändlighet.
  • Negativ oändlighet multiplicerat med ett positivt värde returnerar negativ oändlighet.
  • Positiv oändlighet multiplicerat med ett negativt värde returnerar negativ oändlighet.
  • Negativ oändlighet multiplicerat med ett negativt värde returnerar positiv oändlighet.
  • Positiv/negativ oändlighet multiplicerad med 0 returnerar NaN.
  • Positiv/negativ oändlighet är lika med sig själv.
  • I agg regeringar grupperas alla positiva oändlighets värden samman. På samma sätt grupperas alla negativa oändliga värden samman.
  • Positiv oändlighet och negativ oändlighet behandlas som vanliga värden i kopplings nycklar.
  • Positiv oändlighet sorterar mindre än NaN och högre än andra värden.
  • Negativ oändlighet sorterar mindre än andra värden.

NaN-semantik

Det finns särskild hantering för NaN vid hantering av float eller double typer som inte exakt matchar standarderna för flyttal. Specifikt:

  • NaN = NaN returnerar true.
  • I agg regeringar grupperas alla NaN-värden samman.
  • NaN behandlas som ett normalt värde i kopplings nycklar.
  • NaN-värden går sist i stigande ordning, större än ett numeriskt värde.

Exempel

SELECT double('infinity') AS col;
+--------+
|     col|
+--------+
|Infinity|
+--------+

SELECT float('-inf') AS col;
+---------+
|      col|
+---------+
|-Infinity|
+---------+

SELECT float('NaN') AS col;
+---+
|col|
+---+
|NaN|
+---+

SELECT double('infinity') * 0 AS col;
+---+
|col|
+---+
|NaN|
+---+

SELECT double('-infinity') * (-1234567) AS col;
+--------+
|     col|
+--------+
|Infinity|
+--------+

SELECT double('infinity') < double('NaN') AS col;
+----+
| col|
+----+
|true|
+----+

SELECT double('NaN') = double('NaN') AS col;
+----+
| col|
+----+
|true|
+----+

SELECT double('inf') = double('infinity') AS col;
+----+
| col|
+----+
|true|
+----+

CREATE TABLE test (c1 int, c2 double);
INSERT INTO test VALUES (1, double('infinity'));
INSERT INTO test VALUES (2, double('infinity'));
INSERT INTO test VALUES (3, double('inf'));
INSERT INTO test VALUES (4, double('-inf'));
INSERT INTO test VALUES (5, double('NaN'));
INSERT INTO test VALUES (6, double('NaN'));
INSERT INTO test VALUES (7, double('-infinity'));
SELECT COUNT(*), c2 FROM test GROUP BY c2;
+---------+---------+
| count(1)|       c2|
+---------+---------+
|        2|      NaN|
|        2|-Infinity|
|        3| Infinity|
+---------+---------+