For the “never register a table” part, actually you /can/ use Spark SQL without registering a table via its DSL. Say you’re going to extract an |Int| field named |key| from the table and double it:

|import  org.apache.sql.catalyst.dsl._
val  data  =  sqc.parquetFile(path)
val  double  =  (i:Int) => i *2
data.select(double.call('key) as'result).collect()
|

|SchemaRDD.select| constructs a proper SQL logical plan, which makes Spark SQL aware of the schema and enables Parquet fcolumn pruning optimization. The |double.call('key)| part is the expression DSL, which turns a plain Scala function into a Spark SQL UDF, and applies this UDF to the |key| field.

Notice that the |.call| method is only available in the most recent master and branch-1.2.

On 11/25/14 5:19 AM, Michael Armbrust wrote:

Akshat is correct about the benefits of parquet as a columnar format, but I'll add that some of this is lost if you just use a lambda function to process the data. Since your lambda function is a black box Spark SQL does not know which columns it is going to use and thus will do a full tablescan. I'd suggest writing a very simple SQL query that pulls out just the columns you need and does any filtering before dropping back into standard spark operations. The result of SQL queries is an RDD of rows so you can do any normal spark processing you want on them.

Either way though it will often be faster than a text filed due to better encoding/compression.

On Mon, Nov 24, 2014 at 8:54 AM, Akshat Aranya <[email protected] <mailto:[email protected]>> wrote:

    Parquet is a column-oriented format, which means that you need to
    read in less data from the file system if you're only interested
    in a subset of your columns.  Also, Parquet pushes down selection
    predicates, which can eliminate needless deserialization of rows
    that don't match a selection criterion.  Other than that, you
    would also get compression, and likely save processor cycles when
    parsing lines from text files.



    On Mon, Nov 24, 2014 at 8:20 AM, mrm <[email protected]
    <mailto:[email protected]>> wrote:

        Hi,

        Is there any advantage to storing data as a parquet format,
        loading it using
        the sparkSQL context, but never registering as a table/using
        sql on it?
        Something like:

        Something like:
        data = sqc.parquetFile(path)
        results =  data.map(lambda x: applyfunc(x.field))

        Is this faster/more optimised than having the data stored as a
        text file and
        using Spark (non-SQL) to process it?



        --
        View this message in context:
        
http://apache-spark-user-list.1001560.n3.nabble.com/advantages-of-SparkSQL-tp19661.html
        Sent from the Apache Spark User List mailing list archive at
        Nabble.com.

        ---------------------------------------------------------------------
        To unsubscribe, e-mail: [email protected]
        <mailto:[email protected]>
        For additional commands, e-mail: [email protected]
        <mailto:[email protected]>



Reply via email to