将CSV导入google云数据存储

将CSV导入google云数据存储,csv,google-app-engine,google-cloud-datastore,google-cloud-dataflow,Csv,Google App Engine,Google Cloud Datastore,Google Cloud Dataflow,我有一个CSV文件,有2列和20000行,我想导入到谷歌云数据存储。我是谷歌云和NoSQL数据库的新手。我尝试过使用dataflow,但需要提供一个Javascript UDF函数名。有人举过这样的例子吗?我将在数据存储中查询这些数据。 任何关于如何创建此文件的建议或指导都将不胜感激。使用Apache Beam,您可以使用TextIO类读取CSV文件。请参阅文档 Pipeline p=Pipeline.create(); p、 应用(TextIO.read().from(“gs://path/t

我有一个CSV文件,有2列和20000行,我想导入到谷歌云数据存储。我是谷歌云和NoSQL数据库的新手。我尝试过使用dataflow,但需要提供一个Javascript UDF函数名。有人举过这样的例子吗?我将在数据存储中查询这些数据。
任何关于如何创建此文件的建议或指导都将不胜感激。

使用Apache Beam,您可以使用
TextIO
类读取CSV文件。请参阅文档

Pipeline p=Pipeline.create();
p、 应用(TextIO.read().from(“gs://path/to/file.csv”);
接下来,应用一个转换,该转换将解析CSV文件中的每一行,并返回一个
实体
对象。根据要存储每行的方式,构造适当的
实体
对象。有一个如何创建
实体
对象的示例

.apply(ParDo.of(new DoFn)(){
@过程元素
公共void processElement(ProcessContext c){
字符串行=c.element();
//TODO:解析行(拆分)并构造实体对象
实体=。。。
c、 产出(实体);
}
}));
最后,将
实体
对象写入云数据存储。请参阅文档

.apply(DatastoreIO.v1().write().withProjectId(projectId));

在python中很简单,但可以很容易地适应其他语言。使用
split()

from google.appengine.api import urlfetch
from my.models import MyModel

csv_string   = 'http://someplace.com/myFile.csv'
csv_response = urlfetch.fetch(csv_string, allow_truncated=True) 

if csv_response.status_code == 200:
    for row in csv_response.content.split('\n'):
        row_values = row.split(',')
        # csv values are strings.  Cast them if they need to be something else
        new_entry = MyModel(
            property1 = row_values[0],
            property2 = row_values[1]
        )
        new_entry.put()

else:
    print 'cannot load file: {}'.format(csv_string)

谢谢你,安德鲁。我有几个问题。我看了一下TextIO文档,有一个问题。我将在哪里运行TextIO?在Apache Beam中还是在数据流中?另外,我将在哪里应用转换并将实体写入云数据存储?我发现我可以在数据流中运行作业。这就是您所指的吗?Apache Beam是一个用于定义管道的编程模型。管道可以在执行引擎(如云数据流)上运行。您实际上并没有“运行”
TextIO
。您可以使用Apache Beam SDK定义管道。例如,使用Java SDK,
TextIO.Read
是输入转换,
DatastoreV1.Read
是输出转换。您可以应用两者之间的任何转换来实现ETL逻辑。一旦定义/实现了管道,就可以部署/运行它。