Spark2 est-il vraiment effrayant? L'histoire de DataFrame.
C'est un vieil article parce qu'il a été écrit il y a quelque temps.
input.csv
x,y,z
1,,2
pyspark
>>> df = spark.read.csv("input.csv", header=True)
>>> df
DataFrame[x: string, y: string, z: string]
>>> df.show()
+---+----+---+
| x| y| z|
+---+----+---+
| 1|null| 2|
+---+----+---+
Lorsque vous chargez un tel fichier, le champ vide sera nul au lieu de "". En d'autres termes, enregistrer au format CSV rend impossible la distinction entre "" et null. S'il vous plaît soyez prudente. Cependant, si les données doivent être lues par une autre application Spark, il peut y avoir un moyen de les enregistrer avec Parquet ou Avro sans utiliser CSV.
En utilisant le précédent `` df ''.
pyspark
>>> df.select(pyspark.sql.functions.length("y")).show()
+---------+
|length(y)|
+---------+
| null|
+---------+
#Reconnaître.
>>> df.select(pyspark.sql.functions.split("y", " ")).show()
+-----------+
|split(y, )|
+-----------+
| null|
+-----------+
#Comprenez bien.
>>> df.select(pyspark.sql.functions.size(pyspark.sql.functions.split("y", " "))).show()
+-----------------+
|size(split(y, ))|
+-----------------+
| -1|
+-----------------+
# -1?bien...
>>> df.fillna("").show()
+---+---+---+
| x| y| z|
+---+---+---+
| 1| | 2|
+---+---+---+
#nul""Remplacé par.
>>> df.fillna("").select(pyspark.sql.functions.length("y")).show()
+---------+
|length(y)|
+---------+
| 0|
+---------+
# ""C'est vrai.
>>> df.fillna("").select(pyspark.sql.functions.split("y", " ")).show()
+-----------+
|split(y, )|
+-----------+
| []|
+-----------+
#Sayana.
>>> df.fillna("").select(pyspark.sql.functions.size(pyspark.sql.functions.split("y", " "))).show()
+-----------------+
|size(split(y, ))|
+-----------------+
| 1|
+-----------------+
#Ce n'est pas 0??
>>> df2 = spark.createDataFrame([[[]]], "arr: array<string>")
>>> df2
DataFrame[arr: array<string>]
>>> df2.show()
+---+
|arr|
+---+
| []|
+---+
>>> df2.select(pyspark.sql.functions.size("arr")).show()
+---------+
|size(arr)|
+---------+
| 0|
+---------+
#Pourquoi est-ce 1 et c'est 0...
>>> df.fillna("").select(pyspark.sql.functions.split("y", " ")).collect()
[Row(split(y, )=[u''])]
# Oh...Certainement même en Python len("".split(" ")) == 1
#Est-ce que ça veut dire que je viens de me faire prendre?...orz
Dans la sortie de show () '', vous ne pouvez pas faire la distinction entre le tableau vide
[] et le tableau
["]]
avec une chaîne vide ...
Étonnamment, ces spécifications ne sont pas correctement écrites dans la Documentation. J'étais impatient.
Recommended Posts