# `SparkEx.StreamReader`
[🔗](https://github.com/lukaszsamson/spark_ex/blob/v0.1.1/lib/spark_ex/stream_reader.ex#L1)

Data source reader APIs for creating streaming DataFrames.

Mirrors PySpark's `DataStreamReader` with a builder pattern.

## Examples

    reader = SparkEx.StreamReader.new(session)
    df = reader |> SparkEx.StreamReader.format("rate") |> SparkEx.StreamReader.load()

    # Convenience: rate source for testing
    df = SparkEx.StreamReader.rate(session, rows_per_second: 10)

# `t`

```elixir
@type t() :: %SparkEx.StreamReader{
  format: String.t() | nil,
  options: %{required(String.t()) =&gt; String.t()},
  schema: String.t() | nil,
  session: GenServer.server()
}
```

# `csv`

```elixir
@spec csv(GenServer.server(), String.t(), keyword()) :: SparkEx.DataFrame.t()
```

# `format`

```elixir
@spec format(t(), String.t()) :: t()
```

# `json`

```elixir
@spec json(GenServer.server(), String.t(), keyword()) :: SparkEx.DataFrame.t()
```

# `load`

```elixir
@spec load(t()) :: SparkEx.DataFrame.t()
```

# `load`

```elixir
@spec load(t(), String.t() | [String.t()]) :: SparkEx.DataFrame.t()
```

# `new`

```elixir
@spec new(GenServer.server()) :: t()
```

# `option`

```elixir
@spec option(t(), String.t(), term()) :: t()
```

# `options`

```elixir
@spec options(t(), map() | keyword()) :: t()
```

# `orc`

```elixir
@spec orc(GenServer.server(), String.t(), keyword()) :: SparkEx.DataFrame.t()
```

# `parquet`

```elixir
@spec parquet(GenServer.server(), String.t(), keyword()) :: SparkEx.DataFrame.t()
```

# `rate`

```elixir
@spec rate(
  GenServer.server(),
  keyword()
) :: SparkEx.DataFrame.t()
```

# `schema`

```elixir
@spec schema(t(), String.t() | SparkEx.Types.struct_type()) :: t()
```

Sets the schema for the streaming reader.

Accepts either a DDL string or a struct type from `SparkEx.Types`.

## Examples

    reader |> StreamReader.schema("id LONG, name STRING")
    reader |> StreamReader.schema(SparkEx.Types.struct_type([
      SparkEx.Types.struct_field("id", :long),
      SparkEx.Types.struct_field("name", :string)
    ]))

# `table`

```elixir
@spec table(t(), String.t()) :: SparkEx.DataFrame.t()
```

# `text`

```elixir
@spec text(GenServer.server(), String.t(), keyword()) :: SparkEx.DataFrame.t()
```

# `xml`

```elixir
@spec xml(GenServer.server(), String.t(), keyword()) :: SparkEx.DataFrame.t()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
