количество элементов структуры python - PullRequest
0 голосов
/ 05 января 2020

Используя python и pyspark, я создаю новый фрейм данных структуры. Как я могу проверить, если в этой структуре нет вложенных полей, а если нет, удалите их?

В приведенном ниже коде есть две структуры color и Time. Я хочу проверить, является ли один из них NULL, а затем удалить его. Код

df1 = sqlCtx.createDataFrame ([Row (Row (5, 9, Row (12)), Row (2, True))], схема)

df = df1.withColumn("data",
           struct(
               struct(
               struct(struct(lit(2).alias("b3711"),
                    lit(2).alias("b3712")).alias("b371"),
            (when(col("x2.field3").cast(IntegerType())== lit(1),
            struct(struct(col("x1.field1").alias("dark"),).alias('Black')
               ,col("x1.field1").alias("cl"))).alias("Color")),

                      (when(col("x2.field3").cast(IntegerType())== lit(2),
                struct(col("x1.field1").alias("Q1"),
                col("x1.field1").alias("T1"))).alias("Times"))


                     ).alias("b37")).alias("b3")
                )).drop('x1','x2')

     <DATA>
           <T1>Numerical</T1>
                    <IT>Y</IT>
                    <color>
                       <black>v</black>
                    </color>
                    <Time/>
     </DATA>

Я думал о подсчете предметов по цвету и времени. Я сделал строку ниже, но это не то, что я хочу. У кого есть идея

 count(data.T1.Time)

1 Ответ

0 голосов
/ 05 января 2020

С помощью функции dropna вы можете фильтровать, удалять и создавать новый DataFrame без нулевых значений. Пожалуйста, обратитесь к документации для получения дополнительной информации, но в основном вы можете указать, как фильтровать и отбрасывать нулевые значения (ie: все столбцы, любой из столбцов или подмножество столбцов). В вашем случае вы должны удалить любой из столбцов, имеющих нулевые значения, что приводит к следующему коду:

print(dataDF.count())
print(dataDF.dropna("any").count())

Обновление: чтобы проверять только нулевые значения во времени и цвете, вы можете отфильтровать подмножество:

newDF = dataDF.dropna("any", subset=["Color", "Time"])

Ссылка на документацию: http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark. sql .DataFrame.dropna

Надеюсь, это поможет

...