Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az adatforrás-olvasók alaposztálya.
Az adatforrás-olvasók felelősek az adatforrásból származó adatok kimenetéért. Implementálja ezt az osztályt, és adjon vissza egy példányt DataSource.reader() az adatforrás olvashatóvá tétele érdekében.
Szemantika
from pyspark.sql.datasource import DataSourceReader
class MyDataSourceReader(DataSourceReader):
def read(self, partition):
...
Metódusok
| Módszer | Leírás |
|---|---|
pushFilters(filters) |
Az adatforrásba leküldhető szűrők listájával hívható meg. Olyan szűrőket ad vissza, amelyeket a Sparknak még ki kell értékelnie. Alapértelmezés szerint az összes szűrőt visszaadja, ami azt jelzi, hogy a rendszer nem küld le szűrőket.
pushFilters() lehetőség van a módosításra self. Az objektumnak a módosítás után választhatónak kell maradnia. A módosítások a következőn self láthatók: partitions() és read(). |
partitions() |
Olyan objektumsorozatot InputPartition ad vissza, amely párhuzamos feladatokra osztja fel az adatolvasást. Alapértelmezés szerint egyetlen partíciót ad vissza. Nagyobb adathalmazok olvasása esetén felülbírálás a jobb teljesítmény érdekében. A visszaadott partitions() partícióértékeknek választható objektumoknak kell lenniük. |
read(partition) |
Adatokat hoz létre egy adott partícióhoz, és visszaadja a csuplok, sorok vagy PyArrow-objektumok RecordBatch iterátorát. A rendszer minden egyes rekordot vagy sort a végső DataFrame egy sorává alakít át. Ez a módszer absztrakt, és implementálandó. |
Examples
Implementáljon egy alapszintű olvasót, amely a partíciók listájából ad vissza sorokat:
from pyspark.sql.datasource import DataSource, DataSourceReader, InputPartition
class MyDataSourceReader(DataSourceReader):
def partitions(self):
return [InputPartition(1), InputPartition(2), InputPartition(3)]
def read(self, partition):
yield (partition.value, 0)
yield (partition.value, 1)
Sorok visszaadása a PyArrow RecordBatchhasználatával:
class MyDataSourceReader(DataSourceReader):
def read(self, partition):
import pyarrow as pa
data = {
"partition": [partition.value] * 2,
"value": [0, 1]
}
table = pa.Table.from_pydict(data)
for batch in table.to_batches():
yield batch
Szűrőleküldés implementálása a szűrők támogatásához EqualTo :
from pyspark.sql.datasource import DataSourceReader, EqualTo
class MyDataSourceReader(DataSourceReader):
def __init__(self):
self.filters = []
def pushFilters(self, filters):
for f in filters:
if isinstance(f, EqualTo):
self.filters.append(f)
else:
yield f
def read(self, partition):
...