无法在java spark中读取文件

无法在java spark中读取文件,java,hadoop,apache-spark,Java,Hadoop,Apache Spark,我正在尝试使用eclipse在java上运行spark程序。若我只是在控制台上打印一些东西,但我不能使用textFile函数读取任何文件,那个么它就会运行。 我在某个地方读到,只能使用HDFS读取文件,但在本地系统中无法读取。 请务必让我知道如何访问/读取文件,如果使用HDFS,请告诉我如何在本地系统中安装HDFS,以便我可以读取文本文件 这是我正在测试的一段代码,虽然这个程序工作正常,但无法读取文件,说明输入路径不存在 package spark; import org.apache.spa

我正在尝试使用eclipse在java上运行spark程序。若我只是在控制台上打印一些东西,但我不能使用textFile函数读取任何文件,那个么它就会运行。 我在某个地方读到,只能使用HDFS读取文件,但在本地系统中无法读取。 请务必让我知道如何访问/读取文件,如果使用HDFS,请告诉我如何在本地系统中安装HDFS,以便我可以读取文本文件

这是我正在测试的一段代码,虽然这个程序工作正常,但无法读取文件,说明输入路径不存在

package spark;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.SQLContext;

import org.apache.spark.api.java.function.Function;

public class TestSpark {

    public static void main(String args[])
    {
        String[] jars = {"D:\\customJars\\spark.jar"};
        System.setProperty("hadoop.home.dir", "D:\\hadoop-common-2.2.0-bin-master");
        SparkConf sparkConf = new SparkConf().setAppName("spark.TestSpark")
                .setMaster("spark://10.1.50.165:7077")
                .setJars(jars);

        JavaSparkContext jsc = new JavaSparkContext(sparkConf);
        SQLContext sqlcon = new SQLContext(jsc);
        String inputFileName = "./forecaster.txt" ;
        JavaRDD<String> logData = jsc.textFile(inputFileName);
        long numAs = logData.filter(new Function<String, Boolean>() {

            @Override
            public Boolean call(String s) throws Exception {
                return s.contains("a");
            }
        }).count();

        long numBs = logData.filter(new Function<String, Boolean>() {
              public Boolean call(String s) { return s.contains("b"); }
            }).count();

         System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
        System.out.println("sadasdasdf");

        jsc.stop();
        jsc.close();
    }

}
封装火花;
导入org.apache.spark.SparkConf;
导入org.apache.spark.api.java.JavaRDD;
导入org.apache.spark.api.java.JavaSparkContext;
导入org.apache.spark.sql.DataFrame;
导入org.apache.spark.sql.SQLContext;
导入org.apache.spark.api.java.function.function;
公共类TestSpark{
公共静态void main(字符串参数[])
{
字符串[]jars={“D:\\customJars\\spark.jar”};
System.setProperty(“hadoop.home.dir”,“D:\\hadoop-common-2.2.0-bin-master”);
SparkConf SparkConf=new SparkConf().setAppName(“spark.TestSpark”)
.setMaster(“spark://10.1.50.165:7077")
.setJars(jars);
JavaSparkContext jsc=新的JavaSparkContext(sparkConf);
SQLContext sqlcon=新的SQLContext(jsc);
字符串inputFileName=“./forecaster.txt”;
JavaRDD logData=jsc.textFile(inputFileName);
long numAs=logData.filter(新函数(){
@凌驾
公共布尔调用(字符串s)引发异常{
报税表包含(“a”);
}
}).count();
long numBs=logData.filter(新函数(){
公共布尔调用(字符串s){返回s.contains(“b”);}
}).count();
System.out.println(“带a的行:“+numAs+”,带b的行:“+numBs”);
System.out.println(“sadasdf”);
jsc.stop();
jsc.close();
}
}
我的文件结构:
更新:文件名中没有扩展名
.txt
,您正在应用程序中使用它。您应该将其用作
字符串输入filename=“forecaster”

如果文件与java类
TestSpark
位于同一文件夹中(
$APP\u HOME
):

如果文件位于spark项目下的数据目录中:

String inputFileName = "Data\\forecaster.txt" ;
或者使用以下测试中的完全限定路径日志:

16/08/03 08:25:25 INFO HadoopRDD: Input split: file:/C:/Users/user123/worksapce/spark-java/forecaster.txt
~~~~~~~
String inputFileName = "file:/C:/Users/user123/worksapce/spark-java/forecaster.txt" ;
例如:我复制了您的代码并在本地环境中运行:

这就是我的项目升级的方式,我以以下方式运行它:

 String inputFileName = "forecaster.txt" ;
测试文件:

this is test file
aaa
bbb
ddddaaee
ewwww
aaaa
a
a
aaaa
bb
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;

public class TestSpark {

    public static void main(String args[])
    {
       // String[] jars = {"D:\\customJars\\spark.jar"};
       // System.setProperty("hadoop.home.dir", "D:\\hadoop-common-2.2.0-bin-master");
        SparkConf sparkConf = new SparkConf().setAppName("spark.TestSpark").setMaster("local");
                //.setMaster("spark://10.1.50.165:7077")
                //.setJars(jars);

        JavaSparkContext jsc = new JavaSparkContext(sparkConf);
        //SQLContext sqlcon = new SQLContext(jsc);
        String inputFileName = "forecaster.txt" ;
        JavaRDD<String> logData = jsc.textFile(inputFileName);
        long numAs = logData.filter(new Function<String, Boolean>() {

            @Override
            public Boolean call(String s) throws Exception {
                return s.contains("a");
            }
        }).count();

        long numBs = logData.filter(new Function<String, Boolean>() {

            public Boolean call(String s) { return s.contains("b"); }
            }).count();

         System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
        System.out.println("sadasdasdf");

        jsc.stop();
        jsc.close();
    }

}

我使用的代码:

this is test file
aaa
bbb
ddddaaee
ewwww
aaaa
a
a
aaaa
bb
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;

public class TestSpark {

    public static void main(String args[])
    {
       // String[] jars = {"D:\\customJars\\spark.jar"};
       // System.setProperty("hadoop.home.dir", "D:\\hadoop-common-2.2.0-bin-master");
        SparkConf sparkConf = new SparkConf().setAppName("spark.TestSpark").setMaster("local");
                //.setMaster("spark://10.1.50.165:7077")
                //.setJars(jars);

        JavaSparkContext jsc = new JavaSparkContext(sparkConf);
        //SQLContext sqlcon = new SQLContext(jsc);
        String inputFileName = "forecaster.txt" ;
        JavaRDD<String> logData = jsc.textFile(inputFileName);
        long numAs = logData.filter(new Function<String, Boolean>() {

            @Override
            public Boolean call(String s) throws Exception {
                return s.contains("a");
            }
        }).count();

        long numBs = logData.filter(new Function<String, Boolean>() {

            public Boolean call(String s) { return s.contains("b"); }
            }).count();

         System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
        System.out.println("sadasdasdf");

        jsc.stop();
        jsc.close();
    }

}
import org.apache.spark.SparkConf;
导入org.apache.spark.api.java.JavaRDD;
导入org.apache.spark.api.java.JavaSparkContext;
导入org.apache.spark.api.java.function.function;
公共类TestSpark{
公共静态void main(字符串参数[])
{
//字符串[]jars={“D:\\customJars\\spark.jar”};
//System.setProperty(“hadoop.home.dir”,“D:\\hadoop-common-2.2.0-bin-master”);
SparkConf SparkConf=new SparkConf().setAppName(“spark.TestSpark”).setMaster(“local”);
//.setMaster(“spark://10.1.50.165:7077")
//.setJars(jars);
JavaSparkContext jsc=新的JavaSparkContext(sparkConf);
//SQLContext sqlcon=新的SQLContext(jsc);
字符串inputFileName=“forecaster.txt”;
JavaRDD logData=jsc.textFile(inputFileName);
long numAs=logData.filter(新函数(){
@凌驾
公共布尔调用(字符串s)引发异常{
报税表包含(“a”);
}
}).count();
long numBs=logData.filter(新函数(){
公共布尔调用(字符串s){返回s.contains(“b”);}
}).count();
System.out.println(“带a的行:“+numAs+”,带b的行:“+numBs”);
System.out.println(“sadasdf”);
jsc.stop();
jsc.close();
}
}

Spark需要架构和正确的路径来理解如何读取文件。因此,如果您正在阅读HDFS,则应使用:

jsc.textFile("hdfs://host/path/to/hdfs/file/input.txt");
jsc.textFile("file://path/to/hdfs/file/input.txt");
jsc.textFile("har://archive/path/to/hdfs/file/input.txt");
如果正在读取本地文件(工作节点的本地文件,而不是驱动程序正在运行的机器的本地文件),则应使用:

jsc.textFile("hdfs://host/path/to/hdfs/file/input.txt");
jsc.textFile("file://path/to/hdfs/file/input.txt");
jsc.textFile("har://archive/path/to/hdfs/file/input.txt");
要读取Hadoop归档文件(HAR),应使用:

jsc.textFile("hdfs://host/path/to/hdfs/file/input.txt");
jsc.textFile("file://path/to/hdfs/file/input.txt");
jsc.textFile("har://archive/path/to/hdfs/file/input.txt");

等等。

你能添加错误日志吗?我仍然面临同样的问题。。。。线程“main”org.apache.hadoop.mapred.InvalidInputException中的异常:输入路径不存在:org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:285)org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:228)中的文件:/D:/workspace2/SparkPOC/forecaster.txt在org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:199)的org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:313)上,您可以共享您的项目结构吗?您使用哪个输入路径?(完全限定还是仅限文件名)?您还可以确保文件名是正确的吗?好了…您的文件名中没有扩展名
txt
-请参阅回答中的更新!它可以工作!!!!!谢谢。。。。现在,请帮助我将程序放在不同的机器上,以查看群集计算的实际性能很好…这应该是一个单独的问题-请将其作为一个可接受的答案(将正确的符号设为绿色)-并为下一个问题创建新线程…但提示:(为应用程序创建一个jar,并使用
sprk submit
运行它)