Spark Dataframe - 架构文件定义

时间:2017-04-13 14:46:52

标签: java apache-spark schema parquet

我有一个简单的Spark应用程序,旨在读取分隔的文本文件并将其保存为镶木地板格式。

要求是处理平面数据文件(没有标题),该文件将伴随模式定义。最终结果是一个可执行jar,它作为命令行参数传递给它们。

到目前为止我已经回顾过的示例要么从标题行推断出架构,要么在代码本身中定义架构。怎么可以实现呢?

import org.apache.spark.SparkConf;
import org.apache.spark.SparkContext;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;


public class SparkCSVApplication {

public static void main(String[] args) {
    SparkConf conf = new SparkConf().setAppName("JavaWordCount").setMaster("local");
    // create Spark Context
    SparkContext context = new SparkContext(conf);
    // create spark Session
    SparkSession sparkSession = new SparkSession(context);

    Dataset<Row> df = sparkSession
            .read()
            .format("com.databricks.spark.csv")
            .option("header", true)
            .option("inferSchema", true)
            .load("/Users/Chris/Desktop/Meter_Geocode_Data_150215_114551.csv"); //TODO: CMD line arg
                        //("hdfs://localhost:9000/usr/local/hadoop_data/loan_100.csv");

    System.out.println("========== Print Schema ============");
    df.printSchema();
    System.out.println("========== Print Data ==============");
    df.show();
    System.out.println("========== Generate parquet file ==============");
    df.write().parquet("/Users/Chris/Desktop/meter_geocode.parquet");

}

}

1 个答案:

答案 0 :(得分:0)

public class Fragmen1 extends Fragment { Button HBoton; Button GBoton; Button SCTBoton ; Button RGboton ; Button CPBoton ; Button ARBoton; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_fragmen1, container, false); HBoton = (Button) view.findViewById(R.id.HipotenusaBoton); HBoton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent HBoton = new Intent(getActivity(), Hipotenusa.class); startActivity(HBoton); } }); GBoton= (Button) view.findViewById(R.id.button3); GBoton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent GBoton = new Intent(getActivity(), Grados_Radianes.class); startActivity(GBoton); } }); SCTBoton = (Button) view.findViewById(R.id.SCTboton); SCTBoton.setOnClickListener(new View.OnClickListener() { @Override public void onClick (View v ){ Intent SCTBoton = new Intent(getActivity(), SenoCosenoTangente.class); startActivity(SCTBoton); } }); RGboton = (Button) view.findViewById(R.id.button6); RGboton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent RGboton = new Intent(getActivity(),RadianesGrados.class); startActivity(RGboton); } }); CPBoton = (Button) view.findViewById(R.id.CAPbutton); CPBoton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent CPBoton = new Intent( getActivity(),CordenadasRectagularesPolares.class); startActivity(CPBoton); } }); ARBoton = (Button) view.findViewById(R.id.arboton); ARBoton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent ARBoton = new Intent( getActivity(),AnguloReferencia.class); startActivity(ARBoton); } }); return view; } } 没有从标题行中找出数据类型。它从数据本身中找出数据类型,这里是文档中的文本 -

  

inferSchema - 从数据自动推断输入架构。它   需要对数据进行一次额外的传递。如果设置为None,则使用   默认值,false。

编辑:

要将某些其他文件中定义的架构与现有数据帧相关联,可以通过多种方式以编程方式执行此操作。

假设您有inferSchema中的数据以及名为main.csv的第二个文件中的所有标题,其中只包含以逗号分隔的列名列表。请关注 -

header.csv

免责声明:这是用pyspark编写的,我确信它在java中也很简单。