Фильтр из фрейма данных на основе условия в строке [дубликат]

Проблема Iterator. Как указано в Java doc of PriorityQueue#iterator

Возвращает итератор по элементам в этой очереди. Итератор не возвращает элементы в каком-либо конкретном порядке.

Поскольку toString использует итератор, он не будет напечатан в порядке. Или, если вы используете цикл на основе итератора, тогда он будет в порядке.

И в Java-документе PriorityQueue

очередь запросов поиска, удаление, просмотр и элемент доступа к элементу во главе очереди.

Чтобы получить результаты в порядке, вам придется использовать один из этих методов.

23
задан Community 1 August 2017 в 02:56
поделиться

2 ответа

В Spark> = 1.5 вы можете использовать функцию size :

from pyspark.sql.functions import col, size

df = sqlContext.createDataFrame([
    (["L", "S", "Y", "S"],  ),
    (["L", "V", "I", "S"],  ),
    (["I", "A", "N", "A"],  ),
    (["I", "L", "S", "A"],  ),
    (["E", "N", "N", "Y"],  ),
    (["E", "I", "M", "A"],  ),
    (["O", "A", "N", "A"],  ),
    (["S", "U", "S"],  )], 
    ("tokens", ))

df.where(size(col("tokens")) <= 3).show()

## +---------+
## |   tokens|
## +---------+
## |[S, U, S]|
## +---------+

In Spark & ​​lt; 1.5 UDF должен делать трюк:

from pyspark.sql.types import IntegerType
from pyspark.sql.functions import udf

size_ = udf(lambda xs: len(xs), IntegerType())

df.where(size_(col("tokens")) <= 3).show()

## +---------+
## |   tokens|
## +---------+
## |[S, U, S]|
## +---------+

Если вы используете HiveContext, тогда size UDF с необработанным SQL должен работать с любой версией:

df.registerTempTable("df")
sqlContext.sql("SELECT * FROM df WHERE size(tokens) <= 3").show()

## +--------------------+
## |              tokens|
## +--------------------+
## |ArrayBuffer(S, U, S)|
## +--------------------+

Для строки столбцы, вы можете либо использовать функцию udf, определенную выше, либо функцию length:

from pyspark.sql.functions import length

df = sqlContext.createDataFrame([("fooo", ), ("bar", )], ("k", ))
df.where(length(col("k")) <= 3).show()

## +---+
## |  k|
## +---+
## |bar|
## +---+
42
ответ дан vaer-k 15 August 2018 в 21:39
поделиться
  • 1
    Как насчет того, является ли столбец string, и я притворяюсь фильтром по длине string? – Alberto Bonsanto 26 November 2015 в 16:18
  • 2
    Та же функция udf или length. – zero323 26 November 2015 в 19:21
0
ответ дан Jean-François Corbett 29 October 2018 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: